AES、DES、RSA三种典型加密算法

AES、DES、RSA 三者加密都是可逆的,也就是加密的字符串可以重新解密出来

SHA1、SHA256、MD5 二者加密是不可逆的(实际不是加密,而是Hash散列),也就是加密了字符串无法再解密恢复

例如支付宝加密算法:

开放平台签名算法名称 标准签名算法名称 备注
RSA2 SHA256WithRSA (强烈推荐使用),强制要求RSA密钥的长度至少为2048,
RSA SHA1WithRSA 对RSA密钥的长度不限制,推荐使用2048位以上

由于计算能力的飞速发展,从安全性角度考虑,蚂蚁金服在原来SHA1WithRSA签名算法的基础上,新增了支持SHA256WithRSA的签名算法。

该算法在摘要算法上比SHA1WithRSA有更强的安全能力。

 

AES、DES、RSA、SHA1、MD5 应用场景

DES:本地数据,安全级别低

AES:更快,兼容设备,安全级别高;

RSA:非对称加密,有公钥和私钥

SHA1:公钥后处理回传、密码保护

MD5:防篡改、密码保护

 

 

DES

1977年1月,美国政府颁布:采纳IBM公司设计的方案作为非机密数据的正式数据加密标准(DES Data Encryption Standard) 

目前在国内,随着三金工程尤其是金卡工程的启动,DES算法在POS、ATM、磁卡及智能卡(IC卡)、加油站、高速公路收费站等领域被广泛应用,以此来实现关键数据的保密,如信用卡持卡人的PIN的加密传输,IC卡与POS间的双向认证、金融交易数据包的MAC校验等,均用到DES算法。

DES算法的入口参数有三个:Key、Data、Mode

1)Key为8个字节共64位,是DES算法的工作密钥;

2)Data也为8个字节64位,是要被加密或被解密的数据;

3)Mode为DES的工作方式,有两种:加密或解密。

DES算法是这样工作的:

如Mode为加密,则用Key 去把数据Data进行加密, 生成Data的密码形式(64位)作为DES的输出结果;

如Mode为解密,则用Key去把密码形式的数据Data解密,还原为Data的明码形式(64位)作为DES的输出结果。

在通信网络的两端,双方约定一致的Key,在通信的源点用Key对核心数据进行DES加密,然后以密码形式在公共通信网(如电话网、光纤网)中传输到通信网络的终点,数据到达目的地后,用同样的Key对密码数据进行解密,便再现了明码形式的核心数据。这样,便保证了核心数据(如PIN、MAC等)在公共通信网中传输的安全性和可靠性。

通过定期在通信网络的源端和目的端同时改用新的Key,便能更进一步提高数据的保密性,这正是现在金融交易网络的流行做法。

 

3DES

3DES是DES加密算法的一种模式,它使用3条64位的密钥对数据进行三次加密。

数据加密标准(DES)是美国的一种由来已久的加密标准,它使用对称密钥加密法。

3DES(即Triple DES)是DES向AES过渡的加密算法(1999年,NIST将3-DES指定为过渡的加密标准),是DES的一个更安全的变形。它以DES为基本模块,通过组合分组方法设计出分组加密算法。

设Ek()和Dk()代表DES算法的加密和解密过程,K代表DES算法使用的密钥,P代表明文,C代表密表,这样,

3DES加密过程为:C=Ek3(Dk2(Ek1(P)))

3DES解密过程为:P=Dk1((EK2(Dk3(C)))

K1、K2、K3决定了算法的安全性,若三个密钥互不相同,本质上就相当于用一个长为168位的密钥进行加密。

多年来,它在对付强力攻击时是比较安全的。若数据对安全性要求不那么高,K1可以等于K3。

在这种情况下,密钥的有效长度为112位。

 

AES

AES(Advanced Encryption Standard,高级加密标准),是下一代的加密算法标准,速度快,安全级别高,AES正日益成为加密各种形式的电子数据的实际标准。

AES加密2000年10月,NIST(美国国家标准和技术协会)宣布通过从15种候选算法中选出的一项新的密匙加密标准。

Rijndael被选中成为将来的 AES,Rijndael是在1999年下半年,由研究员Joan Daemen 和 Vincent Rijmen 创建的。

美国标准与技术研究院(NIST)于2002年5月26日制定了新的高级加密标准(AES)规范。

AES算法基于排列和置换运算,排列是对数据重新进行安排,置换是将一个数据单元替换为另一个。

AES使用几种不同的方法来执行排列和置换运算。

AES是一个迭代的、对称密钥分组的密码,它可以使用128(16字节)、192(24字节)、256(32字节)位密钥,并且用128位(16字节)分组加密和解密数据。

与公共密钥加密(非对称加密)使用密钥对不同,对称密钥密码使用相同的密钥加密和解密数据

通过分组密码返回的加密数据的位数与输入数据相同。迭代加密使用一个循环结构,在该循环中重复置换和替换输入数据。

 

RSA

RSA公钥加密算法是1977年由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)、伦纳德·阿德曼(Leonard Adleman)一起提出的。1987年7月首次在美国公布,当时他们三人都在麻省理工学院工作实习。RSA就是他们三人姓氏开头字母拼在一起组成的。

RSA是目前最有影响力和最常用的公钥加密算法,它能够抵抗到目前为止已知的绝大多数密码攻击,已被ISO推荐为公钥数据加密标准。

今天只有短的RSA钥匙才可能被强力方式解破。到2008年为止,世界上还没有任何可靠的攻击RSA算法的方式。

只要其钥匙的长度足够长,用RSA加密的信息实际上是不能被解破的。但在分布式计算和量子计算机理论日趋成熟的今天,RSA加密安全性受到了挑战和质疑。

RSA算法基于一个十分简单的数论事实:将两个大质数相乘十分容易,但是想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥

RSA算法是第一个能同时用于加密和数字签名的算法,也易于理解和操作。(注:数字签名一般用MD5,下文有介绍)

RSA是被研究得最广泛的公钥算法,从提出到现今的三十多年里,经历了各种攻击的考验,逐渐为人们接受,截止2017年被普遍认为是最优秀的公钥方案之一。

SET(Secure Electronic Transaction)协议中要求CA采用2048bits长的密钥,其他实体使用1024比特的密钥。RSA密钥长度随着保密级别提高,增加很快。

下表列出了对同一安全级别所对应的密钥长度。

保密级别

对称密钥长度(bit)

RSA密钥长度(bit)

ECC密钥长度(bit)

保密年限

80

80

1024

160

2010

112

112

2048

224

2030

128

128

3072

256

2040

192

192

7680

384

2080

256

256

15360

512

2120

 

加密算法、DES、IDEA、RSA、DSA

 

RSA 加密算法的缺点: 

1)产生密钥很麻烦,受到素数产生技术的限制,因而难以做到一次一密。

2)安全性,RSA的安全性依赖于大数的因子分解,但并没有从理论上证明破译RSA的难度与大数分解难度等价,而且密码学界多数人士倾向于因子分解不是NPC问题。

3)速度太慢,由于RSA 的分组长度太大,为保证安全性,n 至少也要 600 bitx以上,使运算代价很高,尤其是速度较慢,较对称密码算法慢几个数量级;且随着大数分解技术的发展,这个长度还在增加,不利于数据格式的标准化。 

 

DSA (Digital Signature Algorithm)

被美国国家标准局用来做DSS数据签名标准(Digital Signature Standard)

DSA是基于整数有限域离散对数难题的,其安全性与RSA相比差不多。DSA的一个重要特点是两个素数公开,这样,当使用别人的p和q时,即使不知道私钥,你也能确认它们是否是随机产生的,还是作了手脚。RSA算法却做不到。DSA只是一种算法,和RSA不同之处在于它不能用作加密和解密,也不能进行密钥交换,只用于签名,它比RSA要快很多.

 

算法与可逆性对照表重要,推荐

算法    Key                  位数                 可逆              	其它
MD5    没有Key             	有区别16位和32位    	不可逆               (无)
SHA    ?              		?               	不可逆               (无)
RSA    有(公Key,私KEY)   	?                	可逆                 公、私Key采用不同的加密算法
DES    有                  	?                	可逆                 (无)
DES3   有                  	?                	可逆                 (无)
AES    有                  	?                	可逆                 (无)
BASE64 没有KEY             	?                	可逆                 (无)

Java源码推荐参考:RsaDemo

 

 

DES与AES的比较

自DES 算法公诸于世以来,学术界围绕它的安全性等方面进行了研究并展开了激烈的争论。

在技术上,对DES的批评主要集中在以下几个方面:

1、作为分组密码,DES 的加密单位仅有64 位二进制,这对于数据传输来说太小,因为每个分组仅含8 个字符,而且其中某些位还要用于奇偶校验或其他通讯开销。

2、DES 的密钥的位数太短,只有56 比特,而且各次迭代中使用的密钥是递推产生的,这种相关必然降低密码体制的安全性,在现有技术下用穷举法寻找密钥已趋于可行。

3、DES 不能对抗差分和线性密码分析。

4、DES 用户实际使用的密钥长度为56bit,理论上最大加密强度为256。DES 算法要提高加密强度(例如增加密钥长度),则系统开销呈指数增长。除采用提高硬件功能和增加并行处理功能外,从算法本身和软件技术方面都无法提高DES 算法的加密强度。

 

相对DES算法来说,AES算法无疑解决了上述问题

AES算法,主要表现在以下几个方面:

1、运算速度快,在有反馈模式、无反馈模式的软硬件中,Rijndael都表现出非常好的性能。

2、对内存的需求非常低,适合于受限环境。

3、Rijndael 是一个分组迭代密码, 分组长度和密钥长度设计灵活。

4、AES标准支持可变分组长度,分组长度可设定为32 比特的任意倍数,最小值为128 比特,最大值为256 比特。

5、AES的密钥长度比DES大, 它也可设定为32 比特的任意倍数,最小值为12 比特,最大值为256 比特,所以用穷举法是不可能破解的。

6、AES算法的设计策略是WTS。WTS 是针对差分分析和线性分析提出的,可对抗差分密码分析和线性密码分析。

 

DES与RSA的比较

RSA算法的密钥很长,具有较好的安全性,但加密的计算量很大,加密速度较慢限制了其应用范围。

为减少计算量,在传送信息时,常采用传统加密方法与公开密钥加密方法相结合的方式,即信息采用改进的DES对话密钥加密,然后使用RSA密钥加密对话密钥和信息摘要。对方收到信息后,用不同的密钥解密并可核对信息摘要。

采用DES与RSA相结合的应用,使它们的优缺点正好互补,即

1)DES加密速度快,适合加密较长的报文,可用其加密明文;

2)RSA加密速度慢,安全性好,应用于DES 密钥的加密,可解决DES 密钥分配的问题。

目前这种RSA和DES结合的方法已成为EMAIL保密通信标准。

 

 

MD5 和 SHA1

这两种不能算加密算法,而是哈希函数,用于计算出一段不可逆向计算的数值,以此来验证该文件是否被修改的

它可以验证从网上下载下来文件是否与发布人发布的完全一致,也就是验证文件有没有经过他人(非发布人)的修改。

MD5和SHA1是哈希函数,没有密钥,相当于指纹的概念,只有加密,没有解密,不可逆;

md5是128位的,SHA有不同的算法,有128、256等位...  如SHA-256、SHA-384

 

MD5

MD5(Message-Digest Algorithm 5,消息摘要算法第五版)在90年代初由MIT的计算机科学实验室和RSA Data Security Inc发明,经MD2、MD3和MD4发展而来。

MD5将任意长度的“字节串”变换成一个128bit的大整数,并且它是一个不可逆的字符串变换算法,换句话说就是,即使你看到源程序和算法描述,也无法将一个MD5的值变换回原始的字符串,从数学原理上说,是因为原始的字符串有无穷多个,这有点象不存在反函数的数学函数。

MD5算法具有以下特点:

1、压缩性:任意长度的数据,算出的MD5值长度都是固定的。

2、容易计算:从原数据计算出MD5值很容易。

3、抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别。

4、强抗碰撞:已知原数据和其MD5值,想找到一个具有相同MD5值的数据(即伪造数据)是非常困难的。

MD5的作用是让大容量信息在用数字签名软件签署私人密钥前被"压缩"成一种保密的格式,就是把一个任意长度的字节串变换成一定长的十六进制数字串。

除了MD5以外,其中比较有名的还有sha-1、RIPEMD、Haval等,具体应用详见米扑博客:php 加密算法md5, sha1

 

MD5的典型应用是对一段Message(字节串)产生fingerprint(指纹),以防止被“篡改”。

举个例子,你将一段话写在一个叫 readme.txt文件中,并对这个readme.txt产生一个MD5的值并记录在案,然后你可以传播这个文件给别人,别人如果修改了文件中的任何内容,你对这个文件重新计算MD5时就会发现。如果再有一个第三方的认证机构,用MD5还可以防止文件作者的“抵赖”,这就是所谓的数字签名应用。

MD5还广泛用于加密和解密技术上,在很多操作系统中,用户的密码是以MD5值(或类似的其它算法)的方式保存的, 用户Login的时候,系统是把用户输入的密码计算成MD5值,然后再去和系统中保存的MD5值进行比较,而系统并不“知道”用户的密码是什么(米扑科技的用户密码就是MD5存储,所以我也不知道用户的密码)忘记密码的唯一找回方式(实际是无法找回)就是重置密码,重新记录一个MD5值,而不是输入原密码修改,这也是很多网站支持重置密码的小秘密~

 

SHA-1

在1993年,安全散列算法(SHA)由美国国家标准和技术协会(NIST)提出,并作为联邦信息处理标准(FIPS PUB 180)公布;1995年又发布了一个修订版FIPS PUB 180-1,通常称之为SHA-1。SHA-1是基于MD4算法的,并且它的设计在很大程度上是模仿MD4的。现在已成为公认的最安全的散列算法之一,并被广泛使用。

原理:SHA-1是一种数据加密算法,该算法的思想是接收一段明文,然后以一种不可逆的方式将它转换成一段(通常更小)密文,也可以简单的理解为取一串输入码(称为预映射或信息),并把它们转化为长度较短、位数固定的输出序列即散列值(也称为信息摘要或信息认证代码)的过程。

 

Base64

更加不属于加密算法的范围了,它只是将byte[]数组进行了转换,为什么要转换呢?

就是因为很多加密后的密文后者一些特殊的byte[]数组需要显示出来,或者需要进行传递(电子邮件),但是直接转换就会导致很多不可显示的字符,会丢失一些信息,因此就转换位Base64编码,这些都是可显示的字符。所以转换后,长度会增加,它是可逆的,很容易被破解,一般用于防止人眼睛看,但是计算机反解就一目了然。

 

DES、3DES、AES、RSA

这些才是真正意义的加密算法,而且是可逆的,加解密需要密钥

密钥可以相同(DES、3DES、AES),也可以不同(RSA)

 

非对称加密(公开密钥加密)

公开密钥加密(public-key cryptography),也称为非对称加密(asymmetric cryptography),一种密码学算法类型,在这种密码学方法中,需要一对密钥,一个是私人密钥,另一个则是公开密钥。这两个密钥是数学相关(例如大素数乘积),用某用户密钥加密后所得的信息,只能用该用户的解密密钥才能解密。如果知道了其中一个,并不能计算出另外一个。因此如果公开了一对密钥中的一个,并不会危害到另外一个的秘密性质。称公开的密钥为公钥;不公开的密钥为私钥。

简单说,就是加密和解密用的密钥是不同的,这种加密方式是用数学上的难解问题构造的,例如将数学上的两个大素数相乘十分容易,但那时想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥,其中一个乘数因子作为私密密钥。

 

 

参考推荐

AES 加密算法的详细介绍与实现

AES加密算法的五种加密模式

PHP 对称加密AES算法

php 加密算法md5, sha1

Python 常用加密算法 base64, md5, sha1

Python中Base64编码和解码

公钥,私钥,数字签名的通俗理解

网络安全之数据加密(DES、AES、RSA、MD5)