0

0

历史上的加密算法

PHPz

PHPz

发布时间:2023-12-31 19:23:50

|

1078人浏览过

|

来源于Linux就该这么学

转载

导读 作为一种安全手段,加密算法和我们大多数人的生活发生着紧密联系。只要你上网,都会从中受益,因为凡是使用 https 的网站都已经使用了加密协议 TLS/SSL。因此,我们都在被动享受加密算法带来的隐私保护及通讯安全。此外,从安全技术层面,网络层到主机文件层,无论哪层加密应用或协议背后都是由各种加密算法所支撑。

本文就尝试由古及今,对这种与我们网络生活息息相关的加密算法的发展演变,以及在整个过程中先后出现的集中关键加密算法一一论述,带领大家了解背后这种有趣的算法。

加密算法主要作用是把明文变成密文,防止信息泄露。加密后的密文看起来和乱码很像,但却不是乱码。大部分乱码是由于编码不一致导致的,编码不属于加密算法,只是改变了显示格式而已。比如,base64 只是一种编码而已,不能保障明文安全。以后听到 base64 加密的说法,说明他们不专业。

加密算法需要保证以下三点:

1.机密性:保证数据即使被盗取,小偷也不知道是啥。

2.完整性:保证数据在传输过程中即使被劫持修改,接收方能够发现信息已被截取,而选择换掉。

3.可用性:保证加密算法的开销、复杂度都在可用范围。

满足上述要求的加密算法经历了从古典密码过渡到现代密码的漫长历史发展时期。

古代人如何加密? 1、历史上最早的加密算法

替代法
最早的加密算法主要用于军事,历史上最早关于加密算法的记载出自于周朝兵书《六韬.龙韬》中的《阴符》和《阴书》。其中记载:

太公曰:“主与将,有阴符,凡八等。有大胜克敌之符,长一尺。破军擒将之符,长九寸。降城得邑之符,长八寸。却敌报远之符,长七寸。警众坚守之符,长六寸。请粮益兵之符,长五寸。败军亡将之符,长四寸。失利亡士之符,长三寸。诸奉使行符,稽留,若符事闻,泄告者,皆诛之。八符者,主将秘闻,所以阴通言语,不泄中外相知之术。敌虽圣智,莫之能识。”

武王问太公曰:“… 符不能明;相去辽远,言语不通。为之奈何?” 太公曰:“诸有阴事大虑,当用书,不用符。主以书遗将,将以书问主。书皆一合而再离,三发而一知。再离者,分书为三部。三发而一知者,言三人,人操一分,相参而不相知情也。此谓阴书。敌虽圣智,莫之能识。”

简单来说,阴符是以八等长度的符来表达不同的消息和指令,属于密码学中的替代法,在应用中是把信息转变成敌人看不懂的符号,这种符号法只能表述最关键的八种含义。阴书作为阴符的补充,运用了文字拆分法直接把一份文字拆成三分,由三种渠道发送到目标方手中,敌人只有同时截获三分内容才可能破解。

移位法
无独有偶,在遥远的西方加密算法也大规模使用于战争之中。在希罗多德的《历史》中记载了公元前五世纪,希腊城邦和波斯帝国频频交战,希腊城邦中广泛使用移位法对战争通讯信息进行加密处理,波斯帝国因此难以获得对方军事情报,无法提前做军事部署。希腊城邦用来传输军事信息、命令的每段文字都有固定的字数,接密者手中会有一份文字移位说明。解密者拿到密文后,根据移位说明解密,破解军事命令或消息。

2、古代密码演变的凯撒密码

古典密码主要采用移动法和替换法。其中,移位法就是让明文都向固定方向移动特定位数,例如 I love you 右移动 4 位就变成了 M pszi csy。经过逐渐发展和完善,最有名的莫过于凯撒密码。但英文或拉丁文字母出现的频率并不一致。以英文字母为例:字母e出现频率明显高过其他字母。获得足够密文样本后,通过频率计算准确找到移位规则,从而破解密文。于是大部分凯撒密码采用替换法,定义一张明文密文映射表:

加密算法史

这种方式可在一定程度上解决密钥可穷举的问题,但仍对大数据量的频率攻击束手无策。后来该模式发展为靠引入一些特定参数来扰乱频率,提高解密难度。

古典密码后期发展出维吉尼亚密码、ROT5/13/18/47、摩尔斯密码等一系列密码种类。但都是以替换法和移位法为核心基础,安全性也主要是靠算法不公开来保证。

现代人更科学的加密算法

古典加密算法本质上是语言学上模式的改变。直到20世纪中叶,香农发表了《秘密体制的通信理论》一文,标志着加密算法的重心转移往应用数学上的转移。于是,逐渐衍生出了当今重要的三类加密算法:非对称加密、对称加密以及哈希算法。这三类算法往往组合使用,以发挥最佳效果。

1、对称加密算法

对称加密算法是使用最广泛的加密算法之一。常用的有 DES 算法、AES 算法、3DES 算法、TDEA 算法、Blowfish 算法、RC5 算法、IDEA 算法等。其特点是,加密和解密两方使用同一密钥进行加、解密。按照原理不同,对称加密可以大体分成流加密和分组加密两种类型。

流加密
流加密是将明文按字符逐位地,对应地进行加密的一类对称密码算法。明文和密钥按位对其做约定的运算,即可获得密文。流加密中以 RC4 和 GSM 两种算法最有名,最简单的模型是异或流加密例,如:

加密算法史

流加密原理简单,其算法结构存在弱点,只要泄露局部明文,攻击者很容易算出密钥。另外,由于是按位进行加密,攻击者即使对数据进行篡改,也不会破坏原有数据结构,接收者很难发现其中变化。流加密虽然快捷高效,但其安全性较低,加密关键信息不建议采用此方式。

分组加密
分组加密内部实现则复杂的多,每一个加密块都会经历至少 16 轮运算,其代表算法有 DES 和 AES。目前推荐使用 AES,DES已经不再安全。

DES

DES 是较早时期的对称加密标准,核心主要分成初始置换、轮函数、逆置换三步,在当时得到了广泛的应用。随着计算机性能地不断提高,暴力破解DES变得越来越容易。所以 DES 已经不再安全,近十几年逐渐地被 3DES 和 AES 代替。

AES

起航点卡销售系统
起航点卡销售系统

欢迎使用“起航点卡销售系统”销售程序:一、系统优势 1、售卡系统采取了会员与非会员相结合的销售方法,客户无需注册即可购卡,亦可注册会员购卡。 2、购卡速度快,整个购卡或过程只需二步即可取卡,让客户感受超快的取卡方式! 3、批量加卡功能。 4、取卡方式:网上支付,即时取卡 ,30秒可完成交易。 5、加密方式:MD5 32位不可倒推加密 6、防止跨站

下载

AES 已经被多方分析论证,在全世界范围广泛使用,是目前最为安全的对称加密算法之一。近十年,AES 已然成为对称密钥加密中最流行的算法之一。不同于 DES,AES 使用的是代换-置换网络,而非 Feistel 架构。

大多数 AES 计算是在一个特别的有限域内完成的,加密过程是在一个 4×4 的字节矩阵上运作,这个矩阵又称为“状态state”,其初值就是一个明文区块。加密时,各轮 AES 加密循环(除最后一轮外)均包含 4 个步骤:

AddRoundKey——矩阵中的每一个字节都与该次轮密钥round key做 XOR 运算;每个子密钥由密钥生成方案产生。

SubBytes——通过一个非线性替换函数,用查找表方式把每个字节替换成对应字节。

ShiftRows——将矩阵每个横列进行循环式移位。

MixColumns——充分混合矩阵中各个直行的操作,使用线性转换来混合每列的四个字节。最后一个加密循环中省略 MixColumns 步骤,以另一个 ddRoundKey 取代。

加密模式

AES、DES 内部都支持不同加密模式,每种模式的安全性和效率大不相同。两种最常见模式 ECB 和 CBC 中,ECB 模式加密效率高,但安全性低,模式如下图:

加密算法史

每次都是 Key 对单独块进行加密,容易被对方破解。但由于每个模块之间毫无关联,可以并发运算,极大提高加密效率。通常,ECB 的加密效率比 CBC 高 5-6 倍。但 CBC 较之 ECB 高,安全性则高得多。模式如下图:

加密算法史

每块加密引入一个不同的 IV,需要上一块进行迭代,最终完成整个加密过程。由于每块的 IV 和密文块有关,所以无法采用并发模式,必须串行整个过程。若不是出于极高的性能要求,建议采用更安全、可靠的 CBC 模式。

2、非对称加密算法

非对称加密算法和对称加密算法的最大区别在于,加密密钥和解密密钥不再是一个。这种方式主要为了应对“多个加密者,一个解密者”的模式。于是在这种多对一的关系中就出现了一个公钥体系。一个公钥对应一个私钥。公钥公开,任何数据发送者都用公钥对数据进行加密,但公钥加密的内容只有私钥才能解开。背后的数学原理从大数分解到复杂的椭圆曲线上的离散对数问题,非常复杂。常见非对称加密算法包括 DSA 算法、RSA 算法、Elgamal 算法、背包算法、Rabin 算法、D-H 算法、ECC 算法等。非对称加密算法的执行效率制约着该算法的实际应用,因此大部分应用在身份验证中,并不会在通讯中使用。

3、哈希算法

哈希算法也是非常常见的加密算法之一。它不是用来做数据传输,而是对数据是否被篡改加以验证,防止不法分子篡改数据。特点是无论原文多长都会变成固定长度的字符串,只能加密不能解密(只能单向运算)。常见哈希算法包含 MD5、SHA-1 和 SHA 224/256/512 等。前两者已被证明不再安全,建议使用 SHA 256/512 等安全性高的算法。

上述加密算法已经广泛应用在各个领域。

数据库加密算法

随着云和大数据的高速发展,数据库也逐渐从安全的局域网环境,向私有云甚至公有云迁移。数据库迁移到云上,面临更加严峻的安全挑战。数据库中保存着关键数据,云上主机存在众多不安全隐患,所以云上数据库加密成为解决安全隐患的一剂良药。

对称加密算法

不同于文件加密和通讯加密,数据库加密需要特别关注加密算法是否存在膨胀性,并对加密算法的性能有苛刻的要求。2009 年,安华金和在进行数据库加密产品研发时,首先排除对称算法中的流加密算法,原因是这种算法虽然在运行效率和解决数据膨胀上有天然优势,但在一定情况下存在不安全性。

为了追求加密效率,目前国内依然有部分安全厂商采用这种方式,最基本的安全性要求却被忽略。更稳妥的做法是采用对称加密中的分组加密(AES)进行相关加密处理。分组加密安全性高,在安全方面比较有保障,但需要解决由于数据块大小限制带来的膨胀问题。这需要根据具体情况或字段设计足够精妙的使用方案,来针对不同字段或类型解决膨胀问题,最终形成完美的数据库加密方案。

国产密码算法

密码算法是保障信息安全的核心技术,对于国家机密及各行业核心数据的保护起到至关重要的作用,使用 3DES、SHA-1、RSA 等国际通用的密码算法体系及相关标准,存在较大安全隐患。因此,国家有关机关和监管机构站在国家安全和长远战略的高度提出了推动国密算法应用实施、加强行业安全可控的要求。目前国内的数据库加密产品在面对用户的选型评估时,相当一部分是以支持国密算法为首要条件,这对于政府、军工、保密等相关行业用户来说非常重要,国家信息安全的保障必须摆脱对国外技术和产品的过度依赖,加密算法作为关键安全技术更应国产化。

具体而言,国产密码算法指国家密码局认定的国产商用密码算法,比如,在金融领域目前主要使用公开的 SM2、SM3、SM4 三类算法。以 SM4 算法为例:SM4 分组密码算法是我国自主设计的分组对称密码算法,用于实现数据的加密/解密运算,以保证数据和信息的机密性。要保证一个对称密码算法的安全性的基本条件是其具备足够的密钥长度,SM4 算法与 AES 算法具有相同的密钥长度分组长度 128 比特,因此在安全性上高于 3DES 算法。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

760

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

221

2023.09.04

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1566

2023.10.24

字符串介绍
字符串介绍

字符串是一种数据类型,它可以是任何文本,包括字母、数字、符号等。字符串可以由不同的字符组成,例如空格、标点符号、数字等。在编程中,字符串通常用引号括起来,如单引号、双引号或反引号。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

649

2023.11.24

java读取文件转成字符串的方法
java读取文件转成字符串的方法

Java8引入了新的文件I/O API,使用java.nio.file.Files类读取文件内容更加方便。对于较旧版本的Java,可以使用java.io.FileReader和java.io.BufferedReader来读取文件。在这些方法中,你需要将文件路径替换为你的实际文件路径,并且可能需要处理可能的IOException异常。想了解更多java的相关内容,可以阅读本专题下面的文章。

1228

2024.03.22

php中定义字符串的方式
php中定义字符串的方式

php中定义字符串的方式:单引号;双引号;heredoc语法等等。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

1184

2024.04.29

go语言字符串相关教程
go语言字符串相关教程

本专题整合了go语言字符串相关教程,阅读专题下面的文章了解更多详细内容。

192

2025.07.29

c++字符串相关教程
c++字符串相关教程

本专题整合了c++字符串相关教程,阅读专题下面的文章了解更多详细内容。

131

2025.08.07

C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

76

2026.03.11

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 10.5万人学习

Git 教程
Git 教程

共21课时 | 4.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号