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不可能用意念傳輸還是需要來通過網絡傳輸才行,所以還是又被黑的可能性,于是乎就產生了一個神奇的秘鑰算法,兩臺機器之間只需要傳遞幾個值便可以相互知道最終的秘鑰,而就算是這些傳遞的值被抓走了,也無法破譯最終秘鑰因為關鍵的幾個值只存儲于終端上不在傳輸流通。 
好了上代碼
新聞熱點
疑難解答
圖片精選