NodeJs密码模块整理

密码模块我用的crypto-js,因为目测文档比较丰富。

因为业务需要,需要将Hmac-sha1摘要出的二进制串Base64编码后发送。
但是由于crypto-js在内部加密使用的是私有的二进制数组WordArray,在给其他模块Base64编码时,总是没法拿到原生的二进制串,于是去认真学习了crypto-js。
结果发现没必要拿到原生的二进制串,crypto直接就可以以Base64编码输出。

感觉NodeJS和Java的模块的设计思路偏差还是比较大的,node中并没有一个统一的通行协议,模块按功能进行划分,模块的边界也只能在功能而不能在算法,模块内用私有的数据对象,给多个模块联合工作带来比较大的不便,但是每个模块功能又非常健全,几乎不需要同其它模块合作。
感觉这是语言基因不一样,需要更深入的学习NodeJS,早日写出Node味的代码。

简单用法示例:
var CryptoJS = require(“crypto-js”);
// 默认toHex的输出:
var key = CryptoJS.MD5(content).toString();
// 将结果输出为Base64编码
var auth = CryptoJS.HmacSHA1(to_sign, key).toString(CryptoJS.enc.Base64);
var encrypted = CryptoJS.DES.encrypt(“Message”, “Secret Passphrase”);
var decrypted = CryptoJS.DES.decrypt(encrypted, “Secret Passphrase”);
var encrypted = CryptoJS.AES.encrypt(“Message”, “Secret Passphrase”);
var decrypted = CryptoJS.AES.decrypt(encrypted, “Secret Passphrase”);
var encrypted = CryptoJS.RC4.encrypt(“Message”, “Secret Passphrase”);
var decrypted = CryptoJS.RC4.decrypt(encrypted, “Secret Passphrase”);
// 将内容转变为二进制
var key = CryptoJS.enc.Hex.parse(‘000102030405060708090a0b0c0d0e0f’); var iv = CryptoJS.enc.Hex.parse(‘101112131415161718191a1b1c1d1e1f’); var encrypted = CryptoJS.AES.encrypt(“Message”, key, { iv: iv });
var words = CryptoJS.enc.Base64.parse(‘SGVsbG8sIFdvcmxkIQ==’);
var base64 = CryptoJS.enc.Base64.stringify(words); var words = CryptoJS.enc.Latin1.parse(‘Hello, World!’);
// 编码模块
var latin1 = CryptoJS.enc.Latin1.stringify(words);
var words = CryptoJS.enc.Hex.parse(‘48656c6c6f2c20576f726c6421’);
var hex = CryptoJS.enc.Hex.stringify(words);
var words = CryptoJS.enc.Utf8.parse(‘好’);
var utf8 = CryptoJS.enc.Utf8.stringify(words);
var words = CryptoJS.enc.Utf16.parse(‘Hello, World!’);
var utf16 = CryptoJS.enc.Utf16.stringify(words);
var words = CryptoJS.enc.Utf16LE.parse(‘Hello, World!’);
var utf16 = CryptoJS.enc.Utf16LE.stringify(words);

GitHub: https://github.com/brix/crypto-js

API手册:https://code.google.com/archive/p/crypto-js/

你可能感兴趣的:(二进制,base64,CryptoJS,WordArray)