常见加密算法

七种算法:BASE6四、MD五、SHA、HMAC、RSA 、AES、ECC
 
MD五、SHA、HMAC、RSA这四种加密 算法,可谓是非可逆加密,就是不可解密的加密方法,咱们称之为单向加密算法。
 
1、BASE64 
按照RFC2045的定义,Base64被定义为:Base64内容传送编码被设计用来把任意序列的8位字节描述为一种不易被人直接识别的形式。(The Base64 Content-Transfer-Encoding is designed to represent arbitrary sequences of octets in a form that need not be humanly readable.) 
常见于邮件、http加密,截取http信息,你就会发现登陆操做的用户名、密码字段经过BASE64加密的。
 
主要就是BASE64Encoder、BASE64Decoder两个类,咱们只须要知道使用对应的方法便可。另,BASE加密后产生的字节位数是8的倍数,若是不够位数以=符号填充。
 
2、MD5
MD5 -- message-digest algorithm 5 (信息-摘要算法)缩写,普遍用于加密和解密技术,经常使用于文件校验。校验?无论文件多大,通过MD5后都能生成惟一的MD5值。比如如今的ISO校验,都是MD5校验。怎么用?固然是把ISO通过MD5后产生MD5的值。通常下载linux-ISO的朋友都见过下载连接旁边放着MD5的串。就是用来验证文件是否一致的。
 
一般咱们不直接使用上述MD5加密。一般将MD5产生的字节数组交给BASE64再加密一把,获得相应的字符串。
 
3、SHA
SHA(Secure Hash Algorithm,安全散列算法),数字签名等密码学应用中重要的工具,被普遍地应用于电子商务等信息安全领域。虽然,SHA与MD5经过碰撞法都被破解了, 可是SHA仍然是公认的安全加密算法,较之MD5更为安全。 
 
4、HMAC
HMAC(Hash Message Authentication Code,散列消息鉴别码,基于密钥的Hash算法的认证协议。消息鉴别码实现鉴别的原理是,用公开函数和密钥产生一个固定长度的值做为认证标识,用这个标识鉴别消息的完整性。使用一个密钥生成一个固定大小的小数据块,即MAC,并将其加入到消息中,而后传输。接收方利用与发送方共享的密钥进行鉴别认证等。
 
五.RSA加密
RSA非对称加密算法
非对称加密算法须要两个密钥:公开密钥(publickey)和私有密钥(privatekey)
公开密钥与私有密钥是一对,若是用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;若是用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密
特色:
非对称密码体制的特色:算法强度复杂、安全性依赖于算法与密钥可是因为其算法复杂,而使得加密解密速度没有对称加密解密的速度快
对称密码体制中只有一种密钥,而且是非公开的,若是要解密就得让对方知道密钥。因此保证其安全性就是保证密钥的安全,而非对称密钥体制有两种密钥,其中一个是公开的,这样就能够不须要像对称密码那样传输对方的密钥了
基本加密原理:
(1)找出两个“很大”的质数:P & Q
(2)N = P * Q
(3)M = (P – 1) * (Q – 1)
(4)找出整数E,E与M互质,即除了1以外,没有其余公约数
(5)找出整数D,使得E*D除以M余1,即 (E * D) % M = 1
通过上述准备工做以后,能够获得:
E是公钥,负责加密
D是私钥,负责解密
N负责公钥和私钥之间的联系
加密算法,假定对X进行加密
(X ^ E) % N = Y
n根据费尔马小定义,根据如下公式能够完成解密操做
(Y ^ D) % N = X
 
可是RSA加密算法效率较差,对大型数据加密时间很长,通常用于小数据。
经常使用场景:
分部要给总部发一段报文,先对报文整个进行MD5获得一个报文摘要,再对这个报文摘要用公钥加密。而后把报文和这个RSA密文一块儿发过去。
总部接收到报文以后要先肯定报文是否在中途被人篡改,就先把这个密文用私钥解密获得报文摘要,再和整个报文MD5一下获得的报文摘要进行对比 若是同样就是没被改过。
 
6、AES
AES是开发中经常使用的加密 算法之一。然而因为先后端开发使用的语言不统一,致使常常出现前端加密然后端不能解密的状况出现。然而不管什么语言系统,AES的算法老是相同的, 所以致使结果不一致的缘由在于 加密设置的参数不一致 。因而先来看看在两个平台使用AES加密时须要统一的几个参数。
密钥长度(Key Size) 加密模式(Cipher Mode) 填充方式(Padding) 初始向量(Initialization Vector)
密钥长度
AES算法下,key的长度有三种:12八、192和256 bits。因为历史缘由,JDK默认只支持不大于128 bits的密钥,而128 bits的key已可以知足商用安全需求。所以本例先使用AES-128。( Java使用大于128 bits的key方法在文末说起)
加密模式
AES属于块加密(Block Cipher),块加密中有CBC、ECB、CTR、OFB、CFB等几种工做模式。本例统一使用CBC模式。
填充方式
因为块加密只能对特定长度的数据块进行加密,所以CBC、ECB模式须要在最后一数据块加密前进行数据填充。(CFB,OFB和CTR模式因为与key进行加密操做的是上一块加密后的密文,所以不须要对最后一段明文进行填充)
iOS SDK中提供了PKCS7Padding,而JDK则提供了PKCS5Padding。原则上PKCS5Padding限制了填充的Block Size为8 bytes,而Java实际上当块大于该值时,其PKCS5Padding与PKCS7Padding是相等的:每须要填充χ个字节,填充的值就是χ。 
初始向量
使用除ECB之外的其余加密模式均须要传入一个初始向量,其大小与Block Size相等(AES的Block Size为128 bits),而两个平台的API文档均指明当不传入初始向量时,系统将默认使用一个全0的初始向量。
有了上述的基础以后,能够开始分别在两个平台进行实现了。
iOS实现
先定义一个初始向量的值。
NSString *const kInitVector = @"16-Bytes--String";
肯定密钥长度,这里选择 AES-128。
size_t const kKeySize = kCCKeySizeAES128;
 
7、ECC
ECC是EllipticCurves Cryptography的缩写,意为椭圆曲线密码编码学。和RSA 算法同样,ECC算法也属于公开密钥算法。最初由Koblitz和Miller两人于1985年提出,其数学基础是利用椭圆曲线上的有理点构成Abel加法群上椭圆离散对数的计算困难性。
ECC算法的数学理论很是深奥和复杂,在工程应用中比较难于实现,但它的单位安全强度相对较高,它的破译或求解难度基本上是指数级的,黑客很难用一般使用的暴力破解的方法来破解。RSA算法的特色之一是数学原理相对简单,在工程应用中比较易于实现,但它的单位安全强度相对较低。所以,ECC算法的能够用较少的计算能力提供比RSA加密算法更高的安全强度,有效地解决了“提升安全强度必须增长 密钥长度”的工程实现问题。
 
与RSA算法相比,ECC算法拥有突出优点:
一、更适合于移动互联网:ECC加密算法的密钥长度很短(256位),意味着占用更少的存储空间,更低的CPU开销和占用更少的带宽。随着愈来愈多的用户使用移动设备来完成各类网上活动,ECC加密算法为移动互联网安全提供更好的客户体验。
二、更好的安全性:ECC加密算法提供更强的保护,比目前的其余加密算法能更好的防止攻击,使你的网站和基础设施比用传统的加密方法更安全,为移动互联网安全提供更好的保障。
三、更好的性能: ECC加密算法须要较短的密钥长度来提供更好的安全,例如,256位的ECC密钥加密强度等同于3072位RSA密钥的水平(目前普通使用的RSA密钥长度是2048位)。其结果是你以更低的计算能力代价获得了更高的安全性。经国外有关权威机构 测试,在Apache和IIS服务器采用ECC算法,Web服务器响应时间比RSA快十几倍。
四、更大的IT投资回报:ECC可帮助保护您的基础设施的投资,提供更高的安全性,并快速处理爆炸增加的移动设备的安全链接。 ECC的密钥长度增长速度比其余的加密方法都慢(通常按128位增加,而 RSA则是倍数增加,如:1024 –2048--4096),将延长您现有硬件的使用寿命,让您的投资带来更大的回报。
 
ECC加密算法的通用性不断加强
ECC加密算法自1985年提出,因其工程应用中难度较高,到2005年才在各类 操做系统中得到普遍支持,在全球安全市场需求的刺激下,ECC算法将逐步取代RSA算法,成为主流加密算法。目前,全球各大CA都已经陆续开始为用户签发采用ECC加密算法的各类证书,沃通全球率先支持中文。经沃通大量测试,ECC加密算法之后支持全部操做系统、全部浏览器和各类移动终端,主要有:
Mozilla NSS 3.11以上版本支持
OpenSSL 1.0以上版本支持
微软CryptoAPI Vista/Win7/Win8都支持
BouncyCastle 1.32以上版本支持
JSSE 6 以上版本支持
BSAFE 4.0 以上版本支持
各类版本的IE浏览器、火狐浏览器、谷歌浏览器和苹果浏览器都支持
安卓系统(2.1以上版本)、苹果 iOS(5.0以上版本) 、WindowPhone(各类版本)都支持
也就是说:沃通签发的采用ECC加密算法的各类数字证书(SSL证书、代码签名证书及客户端证书),不管是PC终端仍是各类移动设备都能很好地支持。
相关文章
相关标签/搜索