亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

node.js之基礎加密算法模塊crypto詳解

 更新時間:2018年09月11日 13:47:03   作者:永遠加班的小嵐  
這篇文章主要介紹了node.js之基礎加密算法模塊crypto詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

crypto作為nodeJS已經穩(wěn)定下來的模塊在整個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');//創(chuàng)建一個md5 hash算法
md5.update('aa');//添加要轉化的值
md5.update('cc');//與前面的要轉化的值進行拼接
l(md5.digest('hex'));//打印16進制的密文,
const sha1 = crypto.createHash('sha1');//創(chuàng)建一個sh1 hash算法
sha1.update('bbbb');
l(sha1.digest('hex'));
const hmac = crypto.createHmac('md5', 'key');//創(chuàng)建一個帶秘鑰的sha1或者md5算法
hmac.update('aacc');
l(hmac.digest('hex'));

最后的輸出為

aa794f68b4f6ae5e590e9ed34e94d639
8aed1322e5450badb078e1fb60a817a1df25a2ca
b03d8471e2c5f212289c3e2dcb95bd47

真真的輸出了一堆16進制的字符但是簡單生成個密文看來是很麻煩了。

一般用于密碼的存儲和登錄注冊之類的業(yè)務

可以反編譯的加密算法

//AES 對稱加密算法的一種。
//創(chuàng)建加密算法
function aesEncode(data, key) {
  const cipher = crypto.createCipher('aes192', key);
  var crypted = cipher.update(data, 'utf8', 'hex');
  crypted += cipher.final('hex');
  return crypted;
}
//創(chuàng)建解密算法
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協(xié)商秘鑰算法

在http下真叫別人抓包了,所有的信息就泄露了,就算是你用密文通信,開始需要個key來解碼呀,這個key不可能用意念傳輸還是需要來通過網絡傳輸才行,所以還是又被黑的可能性,于是乎就產生了一個神奇的秘鑰算法,兩臺機器之間只需要傳遞幾個值便可以相互知道最終的秘鑰,而就算是這些傳遞的值被抓走了,也無法破譯最終秘鑰因為關鍵的幾個值只存儲于終端上不在傳輸流通。

好了上代碼

//DH算法協(xié)商秘鑰
/**
 * 主動方使用的協(xié)商方法
 * @returns array():say是要傳達給被動方的三個數據 one是自己要用的一個數據
 */
function dhOneSay() {
  var one = crypto.createDiffieHellman(512);
  var one_key = one.generateKeys();
  var prime = one.getPrime();
  var generator = one.getGenerator();
  var say = {
    prime: prime, generator: generator, one_key: one_key
  };

  return [say, one];
}
/**
 * 被動方使用的協(xié)商方法已經可以得到秘鑰
 * @param {prime: prime, generator: generoter, one_key: one_key} props 
 * @returns array() two_key是要返回給主動方的秘數,theSecret是計算出來的秘鑰
 */
function dhTwoGetSay(props) {
  var two = crypto.createDiffieHellman(props.prime, props.generator);
  var two_key = two.generateKeys();
  var theSecret = (two.computeSecret(props.one_key)).toString('hex');
  return [ two_key, theSecret ];
}
/**
 * 主動方收到被動方給予的秘鑰后
 * @param str two_key 被動方返回的密數
 * @param str one 主動方最初的隨機數
 * @returns str 計算出來的秘鑰
 */
function dhOneGet(two_key,one){
return (one.computeSecret(two_key)).toString('hex');
}
//主動方自己產生數據
var oneSay=dhOneSay();
//被動方接受主動方傳過來的數據進行計算,產生握手數據和最終的秘鑰
var twoGetSay=dhTwoGetSay(oneSay[0]);
//主動方接收到被動方傳來的數據進行計算得到最終秘鑰
var oneSecret=dhOneGet(twoGetSay[0],oneSay[1]);
//被動方的秘鑰早已產生了直接讀取
var twoSecret=twoGetSay[1];
l(oneSay);
l(twoGetSay);
l(oneSecret);
l(twoSecret);

最終結果是

[ { prime: <Buffer ca 7c 9c 21 0d 90 68 4e 69 0b 49 c0 77 0c 4e aa de 92 91 a7 ac 50 17 a4 c2 26 1c 9f a2 32 e0 8c 76 88 de d6 f0 83 5c cd f7 eb 3a 8a 51 49 70 11 93 d3 ... >,
    generator: <Buffer 02>,
    one_key: <Buffer 20 75 74 5d 50 6b 32 59 19 68 87 36 a3 0e 6e a8 6b db 2f c5 48 5d 21 9c 35 3b 3d ce 15 fe b0 65 2d ea e0 b3 49 80 34 33 f5 f9 c4 5b 77 bd bb f9 fe 31 ... > },
  DiffieHellman { _handle: { verifyError: 0 }, verifyError: 0 } ]
[ <Buffer 47 46 86 88 b9 49 5f 6e 52 2a 26 9b c7 ce 5b d3 17 23 fa fa 6c 6d d1 9a 73 aa 8a e7 1a 16 7b 78 d5 40 85 00 da 29 8b 52 0e d5 a4 cb 37 72 49 e5 c5 26 ... >,
  '91de86d30fae396603a64ef3f38f24f82d7d505c5f546f6c6ef2d14d7e77c2511744d76f8b26ff15d2870090620cd7339987806cc0b8519f39eb7b1fa63a0e7b' ]
91de86d30fae396603a64ef3f38f24f82d7d505c5f546f6c6ef2d14d7e77c2511744d76f8b26ff15d2870090620cd7339987806cc0b8519f39eb7b1fa63a0e7b
91de86d30fae396603a64ef3f38f24f82d7d505c5f546f6c6ef2d14d7e77c2511744d76f8b26ff15d2870090620cd7339987806cc0b8519f39eb7b1fa63a0e7b

便可以發(fā)現(xiàn)最后兩個秘鑰的值是完全一樣的(每次運行所產生的秘鑰都是不同的,只要秘鑰相同便說明對應得上),這樣為了強化數據交互的安全性每次進行重要數據傳輸之前就可以先進行一次協(xié)商秘鑰過程(可以協(xié)商完保存起來也可以每次都協(xié)商一遍),然后把協(xié)商出來的秘鑰取固定位數為key進行aes加密解密就會安全多了。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • nodejs教程之環(huán)境安裝及運行

    nodejs教程之環(huán)境安裝及運行

    文章從nodejs環(huán)境安裝、文件結構、路由做了詳細介紹,然后結合mongodb制作注冊功能也做了細致的講述,是篇非常不錯的文章,這里推薦給大家
    2014-11-11
  • Linux下為Node.js程序配置MySQL或Oracle數據庫的方法

    Linux下為Node.js程序配置MySQL或Oracle數據庫的方法

    這篇文章主要介紹了Linux下為Node.js程序配置MySQL或Oracle數據庫的方法,這里默認已經裝配好了Node環(huán)境然后我們利用npm包管理工具來進行配置,需要的朋友可以參考下
    2016-03-03
  • 詳解nodejs微信公眾號開發(fā)——5.素材管理接口

    詳解nodejs微信公眾號開發(fā)——5.素材管理接口

    這篇文章主要介紹了詳解nodejs微信公眾號開發(fā)——5.素材管理接口,非常具有實用價值,需要的朋友可以參考下
    2017-04-04
  • 搭建pomelo 開發(fā)環(huán)境

    搭建pomelo 開發(fā)環(huán)境

    Pomelo是基于 Node.js 的高性能、分布式游戲服務器框架。它包括基礎的開發(fā)框架和相關的擴展組件(庫和工具包),可以幫助你省去游戲開發(fā)枯燥中的重復勞動和底層邏輯的開發(fā)。Pomelo不但適用于游戲服務器開發(fā),也可用于開發(fā)高實時 Web 應用
    2014-06-06
  • 一文學會搭建HTTP服務器調用DLL庫

    一文學會搭建HTTP服務器調用DLL庫

    這篇文章主要為大家介紹了一文學會搭建HTTP服務器調用DLL庫,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-06-06
  • node.js?express和koa中間件機制和錯誤處理機制

    node.js?express和koa中間件機制和錯誤處理機制

    這篇文章主要介紹了node.js?express和koa中間件機制和錯誤處理機制,文章圍繞主題展開詳細的內容介紹,具有一定的參考價值,需要的朋友可以參考一下
    2022-07-07
  • nodejs部署到騰訊云服務器的實現(xiàn)(寶塔面板linux系統(tǒng))

    nodejs部署到騰訊云服務器的實現(xiàn)(寶塔面板linux系統(tǒng))

    本文主要介紹了nodejs部署到騰訊云服務器的實現(xiàn)(寶塔面板linux系統(tǒng)),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-06-06
  • node鏈接mongodb數據庫的方法詳解【阿里云服務器環(huán)境ubuntu】

    node鏈接mongodb數據庫的方法詳解【阿里云服務器環(huán)境ubuntu】

    這篇文章主要介紹了node鏈接mongodb數據庫的方法,結合實例形式分析了nodejs基于阿里云服務器環(huán)境ubuntu下實現(xiàn)連接MongoDB數據庫的相關操作技巧,需要的朋友可以參考下
    2019-03-03
  • node.js中RPC(遠程過程調用)的實現(xiàn)原理介紹

    node.js中RPC(遠程過程調用)的實現(xiàn)原理介紹

    這篇文章主要介紹了node.js中RPC(遠程過程調用)的實現(xiàn)原理介紹,本文基于一個簡單的RPC庫nodejs light_rpc實現(xiàn),需要的朋友可以參考下
    2014-12-12
  • Ubuntu22.04系統(tǒng)下升級nodejs到v18版本

    Ubuntu22.04系統(tǒng)下升級nodejs到v18版本

    ubuntu默認安裝的nodejs版本比較老,要安裝到最新的,下面這篇文章主要給大家介紹了關于Ubuntu22.04系統(tǒng)下升級nodejs到v18版本的相關資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-06-06

最新評論