1. 为什么选择使用JavaScript来复现算法
【密码学 14 CryptoJS】JS实现的算法,可以很方便地被任何语言调用
2. CryptoJS中消息摘要算法的使用
CryptoJS.MD5(message);
CryptoJS.HmacMD5(message, key);
CryptoJS.SHA1(message);
CryptoJS.HmacSHA1(message, key);
CryptoJS.SHA256(message);
CryptoJS.HmacSHA256(message, key);
CryptoJS.SHA512(message);
CryptoJS.HmacSHA512(message, key);
CryptoJS.SHA3('xiaojianbang', {outputLength: 256})
3. 消息摘要算法的其他调用形式
SHA256
var hasher = CryptoJS.algo.SHA256.create();
hasher.reset();
hasher.update('message');
hasher.update(wordArray);
var hash = hasher.finalize();
var hash = hasher.finalize('message');
var hash = hasher.finalize(wordArray);
HmacSHA256
var hmacHasher = CryptoJS.algo.HMAC.create(CryptoJS.algo.SHA256, key);
hmacHasher.reset();
hmacHasher.update('message');
hmacHasher.update(wordArray);
var hmac = hmacHasher.finalize();
var hmac = hmacHasher.finalize('message');
var hmac = hmacHasher.finalize(wordArray);
4. CryptoJS(字符串解析)
// -------------------------------------- string转wordArray
console.log("-----------------------------------------------");
var md5_str= "hengdin.com";
var utf8_str= md5_str;
var hex_str = "68656e6764696e2e636f6d";
var base64_str = "aGVuZ2Rpbi5jb20==";
var utf8_wordarray = CryptoJS.enc.Utf8.parse(utf8_str);
var hex_wordarray= CryptoJS.enc.Hex.parse(hex_str);
var base64_wordarray = CryptoJS.enc.Base64.parse(base64_str);
console.log(utf8_wordarray);
console.log(hex_wordarray);
console.log(base64_wordarray);
// { words: [ 1751477863, 1684631086, 1668246784 ], sigBytes: 11 }// 解析-------------------------------------- wordArray转string
console.log("-----------------------1111------------------------");
// 方式一:
// 默认使用hex 编码
console.log(utf8_wordarray+'');
console.log(hex_wordarray+'');
console.log(base64_wordarray+'');
// 方式二:
console.log(utf8_wordarray.toString(CryptoJS.enc.Utf8));
console.log(hex_wordarray.toString(CryptoJS.enc.Hex));
console.log(base64_wordarray.toString(CryptoJS.enc.Base64));
// 方式三:
console.log(CryptoJS.enc.Utf8.stringify(utf8_wordarray));
console.log(CryptoJS.enc.Hex.stringify(hex_wordarray));
console.log(CryptoJS.enc.Base64.stringify(base64_wordarray));
// Hex编码转Base64编码 :先转成 wordarray再转成 base64 str
var hex_str = "68656e6764696e2e636f6d";
var wordArray__ = CryptoJS.enc.Hex.parse(hex_str);
var base_str__= CryptoJS.enc.Base64.stringify(wordArray__);
console.log(base_str__);
// 加密的参数可以是String 类型 ,也可以是wordarray 类型 string类型的数据,将使用默认的Utf8.parse来解析var str = "hendi";
var str_wordarray= CryptoJS.enc.Utf8.parse(str);
console.log(CryptoJS.MD5(str).toString());
console.log(CryptoJS.MD5(str_wordarray).toString());
推荐阅读
- 错误注入攻击总结(Fault Injection Attack)
- 密码学 13 数字签名算法
- 密码学 12 AES和RSA 的结合
- 密码学 10 非对称加密算法
- 区块链|Zcash:工作原理
- 区块链|比特币钱包安全