常见 编码/加密 算法
- Base64 加密特征
- HASH(散列函数)
-
- MD5
-
- 计算过程
- SHA-1
- SHA-2
- ASCII 编码
Base64 加密特征
- 每三个字节变成四个字节
字节数/3 余1,在最后添加
。例如==
的bash64 编码为%
字节数/3 余2,在最后添加JQ==
。例如=
的bash64 编码为%
YWI=
- 每76个字符加一个换行符
- 最后的结束符也要处理
举个例子
example
转换为二进制之后(利用ASCII 转换的)
01100101 01111000 01100001 01101101 01110000 01101100 01100101
example
长度为7,不是3 的倍数,缺少两个字节,要在最后加上两个字节的 0,也就是16位0
01100101 01111000 01100001 01101101 01110000 01101100 01100101 00000000 00000000
然后我们将其按照6位1字符排好
011001 010111 100001 100001 011011 010111 000001 101100 011001 010000 000000 000000
每6位前面 填充00之后得到
00011001 00010111 00100001 00100001 00011011 00010111 00000001 00101100 00011001 00010000 00000000 00000000
转换为 十进制
25 23 33 33 27 23 1 44 25 16 0 0
对照表用字符替换之后得到
ZXhhbXBsZQAA
,由于最后两位是自动补充上去的,再将最后的AA换成==即可
ZXhhbXBsZQ==
HASH(散列函数)
把任意长度的输入通过散列算法变换成固定长度的输出,该输出就是散列值。
这种转换是一种压缩映射,也就是,散列值的空间远小于输入的空间,不同的输入可能会散裂成相同的输出,所以不可能从散列值来确定唯一的输入值。
作用:安全地存储密码,查找重复记录,快速存储和检索数据
MD5
消息摘要算法版本5:它是一种 Hash 算法。将任意长度的数据映射为128bit的数据。可用于完整性校验
MD5的输出可以是16位,也可以是32位。其中16位是 32位的
str.substring(8, 24)
(第9到24位)
特点:
- 不可逆
- 唯一性
计算过程
- 数据填充。将数据填充为512的倍数
- 循环计算,将第一个分组 经计算得出的md5值,用作下一个分组的状态输入
SHA-1
将任意长度消息生成固定长度为 160bit 的数据,目前SHA-1已经被破解
SHA-2
也是一种 HASH 算法,但是输出的散列值 根据 不同的分类,输出的固定长度会不一样
SHA-2的分类:SHA-224、SHA-256、SHA-384、SHA-512、SHA-512/224、SHA-512/256。
应用:
- 目前数字签名中的 SSL 算法中使用的就是 SHA-2 算法
- 比特币
ASCII 编码
是基于拉丁字母的一套电脑编码系统
任何字符要通过计算机通信,都要先转化为ASCII码,然后再转为二进制。如果需要base64编码,那么接下来就是Base64编码的流程了
ascii编码对照表