编码-摘要-加解密
编码
文本、可逆、通常用于字符集无关的传输编码、二进制文本化等
Base64
-
编码字符由A-Za-z0-9,还有”+”,”/”一共64个字符组成,还有”=”用于补位用
-
原数据大小要多大约三分之一
-
注意换行的可能性(Android指定NO_WRAP)
-
URL_SAFE方式(用于规避传输编码冲突,采用-_代替+/)
摘要
-
不可逆、定长、用于不需要解密的数据
-
注意:不同库的结果大小写不一样
MD5(不安全)
产生出一个128位(16字节)的散列值
SHA
SHA-0(不安全)
SHA-1(安全性一般)
SHA-2(安全)
-
SHA-224
-
SHA-256
-
SHA-384
-
SHA-512
SHA-3(第三代安全散列算法,之前名为Keccak)
加解密
对称加密
加密和解密所用的密钥是相同的
DES(不安全)
-
密钥64位,其中8位是校验码,有效密钥长度为56位
-
块密码,每64位一组,不足补位
3DES(安全)
密钥选项1:三个密钥是独立的。
密钥选项2:K1和K2是独立的,而K3=K1
密钥选项3:三个密钥均相等,即K1=K2=K3
-
DES的安全加强版,最多支持168密钥
-
常见的有DED(解密-加密-解密)/EDE模式(加密-解密-加密)
AES(安全)
-
密钥长度可以是128,192或256位
-
块密码,每128位一组,不足补位
关于加密后的长度问题
-
加密后字节大小无变化(除了可能存在补位)
-
字节文本化(Base64)是主要影响
非对称加密
RSA
-
密钥长度可选值:1024、2048、3072、4096…
-
非对称加密算法中1024 bit密钥的强度相当于对称加密算法80bit密钥的强度
-
密钥长度增长一倍,公钥操作所需时间增加约4倍,私钥操作所需时间增加约8倍,公私钥生成时间约增长16倍
-
-
加密比较慢,通常结合DES/AES加密报文+RSA加密密钥完成
-
同一公钥加密,密文可能不一样。同一私钥加密,密码一样。(补位规则不同)
-
加密的明文长度不能超过密钥的长度减去11字节,加密后的密文长度跟密钥长度相同
-
不足补位(见PKCS1)
-
超过分片(非标准)
-
块密码
补位
-
C/C++常用补\0
-
PKCS5、PKCS7标准(DES/AES常用)
-
PKCS1标准(RSA常用)
-
参考http://www.di-mgt.com.au/cryptopad.html
工作方式
电子密码本(ECB)
-
对每个块进行独立加密,同样的平文块会被加密成相同的密文块
-
不能提供严格的数据保密性
密码块链接(CBC)
-
每个平文块先与前一个密文块进行异或后,再进行加密
-
需要使用初始化向量IV