crypto作为nodeJS已经稳定下来的模块在整个node中具有举足轻重的地位,一切app都需要加密解密,那么crypto就是一个提供加密功能的模块。在这个模块中已经打包了OpenSSL hash, HMAC(哈希信息验证码),cipher(加密),decipher(解密),sign(签名)以及verify(验证)的功能。
加密算法crypto
我很难想象在php里面md5加密只是三个字符的一个方法而已,在node.js中没封装前竟然那么长!!
无法反编译的加密方式
话不多说直接上代码品鉴吧
onst crypto = require('crypto');function l(param) { console.log(param);}const md5 = crypto.createHash('md5');//创建一个md5 hash算法md5.update('aa');//添加要转化的值md5.update('cc');//与前面的要转化的值进行拼接l(md5.digest('hex'));//打印16进制的密文,const sha1 = crypto.createHash('sha1');//创建一个sh1 hash算法sha1.update('bbbb');l(sha1.digest('hex'));const hmac = crypto.createHmac('md5', 'key');//创建一个带秘钥的sha1或者md5算法hmac.update('aacc');l(hmac.digest('hex'));
最后的输出为
aa794f68b4f6ae5e590e9ed34e94d639
8aed1322e5450badb078e1fb60a817a1df25a2ca
b03d8471e2c5f212289c3e2dcb95bd47
真真的输出了一堆16进制的字符但是简单生成个密文看来是很麻烦了。
一般用于密码的存储和登录注册之类的业务
可以反编译的加密算法
//AES 对称加密算法的一种。//创建加密算法function aesEncode(data, key) { const cipher = crypto.createCipher('aes192', key); var crypted = cipher.update(data, 'utf8', 'hex'); crypted += cipher.final('hex'); return crypted;}//创建解密算法function aesDecode(encrypted, key) { const decipher = crypto.createDecipher('aes192', key); var decrypted = decipher.update(encrypted, 'hex', 'utf8'); decrypted += decipher.final('utf8'); return decrypted;}var data = '我是一个大傻瓜';var key = 'keykey';l(aesEncode(data, key));l(data);l(aesDecode(aesEncode(data, key), key));
最终输出
3094e920cf4208e9cf1b209d4be9a2f018541c70db89b4e4fdcf3bda12d3abc7
我是一个大傻瓜
我是一个大傻瓜
这个的话感觉可以用于一般的密文通信。
DH协商秘钥算法
在http下真叫别人抓包了,所有的信息就泄露了,就算是你用密文通信,开始需要个key来解码呀,这个key不可能用意念传输还是需要来通过网络传输才行,所以还是又被黑的可能性,于是乎就产生了一个神奇的秘钥算法,两台机器之间只需要传递几个值便可以相互知道最终的秘钥,而就算是这些传递的值被抓走了,也无法破译最终秘钥因为关键的几个值只存储于终端上不在传输流通。
好了上代码
新闻热点
疑难解答
图片精选