概念描述
对称加密
- 对称加密算法在加密和解密时使用相同的密钥,或是使用两个可以简单地相互推算的密钥。
- 常见算法:DES、3DES、AES、Blowfish、IDEA、RC5、RC6。
- 优点:加密解密的速度比较快(比非对称快)。
- 缺点:密钥单一,一旦泄漏就不安全。
非对称加密
- 这种密码学方法中,需要一对密钥,一个是私人密钥,另一个则是公开密钥。这两个密钥是数学相关。私钥加密的数据公钥才能解开,公钥加密的需要私钥解密。
- 常见算法: RSA、ElGamal、背包算法、Rabin(RSA的特例)。
- 优点:更加安全一些,毕竟私钥只有自己才知道,只要是不泄露就是安全的。
- 缺点:加解密速递慢,系统的开销更大。
消息摘要
- 它是一个唯一对应一个消息或文本的固定长度的值,它由一个单向Hash加密函数对消息进行作用而产生。
- 作用: 接收者通过对收到消息的新产生的摘要与原摘要比较,就可知道消息是否被改变了。因此消息摘要保证了消息的完整性。
数字签名
- 一种类似写在纸上的普通的物理签名,但是使用了公钥加密领域的技术实现,用于鉴别数字信息的方法。
- 作用: 接收方能够通过签名确认发送发的身份,发送发也无法否认(私钥不泄漏的情况下)。
数字证书
- 一种用于电脑的身份识别机制。数字证书不是数字身份证,而是身份认证机构盖在数字身份证上的一个章或印(或者说加在数字身份证上的一个签名),这一行为表示身份认证机构已认定这个持证人。
- 颁发: 一般由数字证书认证机构(Certificate Authority)制作颁发,根据各种不同情况,可能是CA给用户颁发的,或者用户主动申请的。
- 客户端通过CA的公钥解密出来消息发送者公钥,解决客户端公钥可能被代理者替换问题。
加密算法
电子邮件传输算法
Base64
- 解决早期电子邮件中非ASCII码传输问题。
- Base64 基于64个字符编码的算法,文字经过加密可以生成密文(bGtqc2Rsa2Zqcw==),解密可以得到原始数据。
- Base64 可以充当加密解密的工作,它的算法公开,有一张映射表充当密钥,但是不是加密算法,原因是他的密钥也是公开的。
- 通过Base64编码,原来的3个字节编码后将成为4个字节,即字节增加了33.3%。也就是说增加了1/3的长度。
对称加密
DES
- 数据加密标准(Data Encryption Standard,缩写为DES)。
- 对称加密技术(只有一把密钥)。
- 现在已经不是一种安全的加密方法,主要因为它使用的56位密钥过短。
- DES算法主要采用替换和移位的方式进行加密,它用56位(64位密钥只有56位有效)对64位二进制数据块进行加密,每次加密对64位的输入数据进行16轮编码,经过一系列替换和移位后,输入的64位原数据转换成完全不同的64位输出数据。
AES
- 高级加密标准(Advanced Encryption Standard,缩写:AES)。
- 对称加密技术(只有一把密钥)。
- AES是一个分组密码,加密过程涉及4种操作:字节替代(SubBytes)、行移位(ShiftRows)、列混淆(MixColumns)和轮密钥加(AddRoundKey)。
- 替代DES,128位及以上AES还没有出现过破解,安全程度高。
非对成加密
RSA
- 非对称加密(公钥私钥)。
- 解决对成加密中密钥管理问题,对称加密中客户端和服务端使用同一份密钥,容易泄漏。
- 非对成加密私钥保留,公钥公开。只要保证私钥的安全性即可。
- RSA算法的可靠性基于极大整数做因数分解的难度。
- 世界上还没有任何可靠的攻击RSA算法的方式。只要其钥匙的长度足够长,用RSA加密的信息实际上是不能被解破的。
信息摘要
MD5
- MD5的全称是Message-Digest Algorithm 5(信息-摘要算法)
- 单向不可逆
-可以被加以破解,对于需要高度安全性的数据,一般建议改用其他算法,如SHA-1。2004年,证实MD5算法无法防止碰撞,因此无法适用于安全性认证。
SHA
- 安全散列算法(Secure Hash Algorithm)是一个密码散列函数家族,基于MD4算法演化,能计算出一个数字消息所对应到的,长度固定的字符串(又称消息摘要)的算法。
- 单向不可逆
- SHA-1于1995年发布,SHA-1在许多安全协议中广为使用,包括TLS和SSL、PGP、SSH、S/MIME和IPsec,曾被视为是MD5(更早之前被广为使用的散列函数)的后继者。2017年2月23日,CWI Amsterdam与Google宣布了一个成功的SHA-1碰撞攻击。
加盐
- 盐(Salt),在密码学中,是指通过在密码任意固定位置插入特定的字符串,让散列后的结果和使用原始密码的散列结果不相符,这种过程称之为“加盐”。
- 短密码的散列结果很容易被彩虹表破解,通过给密码加上特定字符串,散列之后的结果产生变化。
- 实际使用中密码可以通过(MD5 or sha)(密码 + 盐)存储。
备注
- java语言中常用加解密组件为Bouncy Castle和Commons Codec加密组件。
- 这篇文章深入浅出的解释了非对称加密,数字签名,证书.http://www.ruanyifeng.com/blog/2011/08/what_is_a_digital_signature.html