加密安全
加密安全
Shio加密安全
Base64
编码
将二进制字节转化为文本格式
将任意二进制字节数据转化为只包含 A
Z
a
z
0
~`9
+
/
=` 这64个字符
原理是将3个字节的二进制数据按照6bit
一组, 用4个int整数
表示, 然后将int整数用索引对应到字符, 得到编码后的字符串
3个byte数据分别是e4
、b8
、ad
,按6bit
分组得到39
、0b
、22
和2d
:
┌───────────────┬───────────────┬───────────────┐ |
字符A
Z
对应索引0
25
,字符a
z
对应索引26
51
,字符0
9
对应索引52
61
,最后两个索引62
、63
分别用字符+
和/
表示。
如果字节数不是3的倍数, 用 =
或者 ==
补到三的倍数
例如 :
16个字节 补成 18个字节
最后会生成 24个字符(18 / 3 * 4)
哈希算法(Digest)
常用的哈希算法有:
算法 | 输出长度(位) | 输出长度(字节) |
---|---|---|
MD5 |
128 bits | 16 bytes |
SHA-1 |
160 bits | 20 bytes |
RipeMD-160 |
160 bits | 20 bytes |
SHA-256 |
256 bits | 32 bytes |
SHA-512 |
512 bits | 64 bytes |
用哈希存储口令时要考虑彩虹表攻击, 通常通过加盐来加大破解难度(即便有彩虹表(数据量为m)和salt(数据量为n) 复杂度也会是O(m * n))
非安全专业不要尝试自己写哈希算法库, 直接用开源得到公众认可的库
消息认证算法(MAC)
Hmac
算法就是一种基于密钥的消息认证码算法
Hmac
算法总是和某种哈希算法配合起来用的, 本质上就是把key混入摘要的算法。验证此哈希时,除了原始的输入数据,还要提供key
这里的key可以理解为盐
可以配合MD5
、SHA-1
等哈希算法,计算的摘要长度和原摘要算法长度相同。
对称加密算法
在软件开发中,常用的对称加密算法有:
算法 | 密钥长度 | 工作模式 | 填充模式 |
---|---|---|---|
DES |
56/64 | ECB/CBC/PCBC/CTR/... |
NoPadding/PKCS5Padding/... |
AES |
128/192/256 | ECB/CBC/PCBC/CTR/... |
NoPadding/PKCS5Padding/PKCS7Padding/... |
IDEA |
128 | ECB |
PKCS5Padding/PKCS7Padding/... |
【加密】DES加密算法中,ECB和CBC模式有什么区别?_ecb cbc-CSDN博客
对称加密算法决定了口令必须是固定长度,然后对明文进行分块加密。又因为安全需求,口令长度往往都是128位以上,即至少16个字符
DES算法由于密钥过短,可以在短时间内被暴力破解,所以现在已经不安全了。
ECB
模式是最简单的AES
加密模式,它只需要一个固定长度的密钥,固定的明文会生成固定的密文,这种一对一的加密方式会导致安全性降低
更好的方式是通过CBC
模式,它需要一个随机数作为IV参数,这样对于同一份明文,每次生成的密文都不同
口令加密算法
PBE
就是Password Based Encryption
, 作用就是把用户输入的口令和一个安全随机的口令采用杂凑后计算出真正的密钥
PBE算法
并没有真正构建新的加密/解密算法,而是对我们已经知道的对称加密算法(如DES算法)做了包装。使用PBE算法对数据做加密/解密操作的时候,其实是使用了DES
或者是AES
等其它对称加密算法做了相应的操作。