CryptoJS是原生javascript写的加密类库,提供了各种编码和加密算法,如MD5、SHA-1、SHA-256、AES、HMAC、PBKDF等。
以常见的Md5摘要及Base64编码为例,测试代码如下:
index.html
|
|
main.js
|
|
运行结果
|
|
值得注意的是:
MD5转为字符串再进行Base64编码(第一种)
与
MD5字节数组直接进行Base64编码(第二种)
的输出结果不同。
原因是Md5结果为128bit,转字符串时,算法默认使用16进制,每4bit为一个字节,结果得到32字节长度的定长字符串,再进行base64编码,得到44字节长度的字符串; 而第二种Md5字节流直接进行Base64编码,1字节=8bit,128bit即16字节,base64编码后为24字节。
扩展
算法 | bit | byte |
---|---|---|
MD5 | 128 | 32 |
SHA1 | 160 | 40 |
SHA224 | 224 | 56 |
SHA256 | 256 | 64 |
SHA384 | 384 | 96 |
SHA512 | 512 | 128 |
- 数据摘要算法不是加密算法,因为不可逆。常见的数据摘要算法位数及转为字符串所占字节数如上表
- js默认使用iso8859-1编码,几乎对于编码(utf8、unicode、gbk、ASCII),英文数字等简单字符(码表中序列0-255)的编码,1字符=1字节
- base64编码会把3字节的二进制数据编码为4字节的文本数据,转换过程不足3字节,末尾补足\x00,再在编码的末尾加上1个或2个=号,表示补了多少字节,解码时再去掉。=在URL、Cookie里会造成歧义,所以,有些base64编码后会把=去掉
- Md5摘要的字符串长度为32字节,16字节的Md5摘要是取32字节的中间16字节。如a12345678的摘要,32位为:e9bc0e13a8a16cbb07b175d92a113126,16位为:a8a16cbb07b175d9