加密算法

来源:互联网 发布:虚拟机 linux nat 编辑:程序博客网 时间:2024/06/18 18:19
对称性加密:
信息接收双方都需事先知道密匙和加解密算法且其密匙是相同的,通过密匙和算法对数据进行加解密。对称算法的安全性依赖于密钥,泄漏密钥就意味着任何人都能对消息进行加/解密。只要通信需要保密,密钥就必须保密。对称算法可分为两类。一次只对明文中的单个比特(有时对字节)运算的算法称为序列算法或序列密码。另一类算法是对明文的一组比特进行运算,这些比特组称为分组,相应的算法称为分组算法或分组密码。现代计算机密码算法的典型分组长度为64比特,这个长度大到足以防止分析破译,但又小到足以方便使用。

对称性加密算法:AES , DES , 3DES(3DESede或TripleDES) , Blowfish,rc4
AES:采用对称分组密码体制,密钥的长度最少支持为128、192、256,分组长度固定为128位,算法应易于各种硬件和软件实现。
Blowfish:是一个64位分组及可变密钥长度的对称密钥分组密码算法,可用来加密64比特长度的字符串。Blowfish算法在加密速度上超越了DES。Blowfish算法具有加密速度快、紧凑、密钥长度可变、可免费使用(百度百科)。
rc4 密钥长度可变的流加密算法簇,用于无线通信网络,是一种电子密码。核心部分的S-box长度可为任意,但一般为256字节。该算法的速度可以达到DES加密的10倍左右。
DES是一种分组数据加密技术(先将数据分成固定长度的小数据块,之后进行加密),速度较快,适用于大量数据加密,使用56位密钥比较容易被破解,而3DES是一种基于DES的加密算法,使用3个不同密匙对同一个分组数据块进行3次加密,如此以使得密文强度更高。
相较于DES和3DES算法而言,AES算法有着更高的速度和资源使用效率,安全级别也较之更高了。


非对称加密:
发送双方A,B事先均生成公匙和私匙,然后A将自己的公匙发送给B,B将自己的公匙发送给A。如果A要给B发送消息,则先需要用B的公匙进行消息加密,然后发送给B端,此时B端再用自己的私匙进行消息解密,B向A发送消息时为同样的道理。当前的非对称加密算法的速度,比起对称密码算法,要慢的多,这使得公开密码算法在大数据量的加密中应用有限。

非对称性加密算法:RSA,DSA,ECC
RSA和DSA的安全性及其它各方面性能都差不多,而ECC较之则有着很多的性能优越,包括处理速度,带宽要求,存储空间等等。
其中RSA的安全性是基于极其困难的大整数的分解(两个素数的乘积);DSA 的安全性是基于整数有限域离散对数难题。基本上可以认为相同密钥长度的 RSA 算法与 DSA 算法安全性相当。
在DSA数字签名和认证中,发送者使用自己的私钥对文件或消息进行签名,接受者收到消息后使用发送者的公钥来验证签名的真实性。DSA只是一种算法,和RSA不同之处在于它不能用作加密和解密,也不能进行密钥交换,只用于签名,它比RSA要快很多.
ECC(椭圆曲线算法)
 ECC 与 RSA 相比,有以下的优点:
(1)相同密钥长度下,安全性能更高,如160位ECC已经与1024位RSA、DSA有相同的安全强度。
(2)计算量小,处理速度快,在私钥的处理速度上(解密和签名),ECC远 比RSA、DSA快得多。
(3)存储空间占用小 ECC的密钥尺寸和系统参数与RSA、DSA相比要小得多, 所以占用的存储空间小得多。
(4)带宽要求低使得ECC具有广泛得应用前景。




单向散列:
单向散列函数 H(M) 作用于一个任意长度的消息 M,它返回一个固定长度的散列值 h,这个过程是不可逆的,并且没有“碰撞”。


单向散列算法:MD5,SHA1(SHA1  SHA224  SHA256  SHA384  SHA512),HMAC(HmacSHA1  HmacSHA224 HmacSHA256  HmacSHA384 HmacSHA512  HmacMD5P)

散列算法只生成一串不可逆的密文,经常用其效验数据传输过程中是否经过修改,因为相同的生成算法对于同一明文只会生成唯一的密文,若相同算法生成的密文不同,则证明传输数据进行过了修改。通常在数据传说过程前,使用MD5和SHA1算法均需要发送和接收数据双方在数据传送之前就知道密匙生成算法,而HMAC与之不同的是需要生成一个密匙,发送方用此密匙对数据进行摘要处理(生成密文),接收方再利用此密匙对接收到的数据进行摘要处理,再判断生成的密文是否相同。
BKDF2  可以指定key长度,盐值和迭代次数


数字签名:
将消息的摘要信息(HASH值)用发送者的私钥加密,与原文一起传送给接收者。接收者只有用发送者的公钥才能解密被加密的摘要信息,然后用HASH函数对收到的原文产生一个摘要信息,与解密后的摘要信息对比。如果相同,则说明收到的信息是完整的,在传输过程中没有被修改,否则说明信息被修改过,因此数字签名能够验证信息的完整性。
这个过程有两个作用:一是身份确认,可以确定消息确实是由发送方签名并发出来的,别人假冒不了发送方的消息签名;二是数字签名能确定消息的完整性。



对于各种加密算法的选用:
由于对称加密算法的密钥管理是一个复杂的过程,密钥的管理直接决定着他的安全性,因此当数据量很小时,我们可以考虑采用非对称加密算法。
在实际的操作过程中,我们通常采用的方式是:采用非对称加密算法管理对称算法的密钥,然后用对称加密算法加密数据,这样我们就集成了两类加密算法的优点,既实现了加密速度快的优点,又实现了安全方便管理密钥的优点。

如果在选定了加密算法后,那采用多少位的密钥呢?一般来说,密钥越长,运行的速度就越慢,应该根据的我们实际需要的安全级别来选择,一般来说,RSA建议采用1024位的数字,ECC建议采用160位,AES采用128为即可。


java 加密算法实现

http://download.csdn.net/detail/convict_eva/9780337

java 加密解密艺术

http://download.csdn.net/detail/convict_eva/9804212

Java使用Hutool加密工具

https://my.oschina.net/looly/blog/1504160

0 0