成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

crypto模塊如何在node.js中使用

本篇文章給大家分享的是有關(guān)crypto模塊如何在node.js中使用,小編覺(jué)得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說(shuō),跟著小編一起來(lái)看看吧。

創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比翁源網(wǎng)站開(kāi)發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫(kù),直接使用。一站式翁源網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋翁源地區(qū)。費(fèi)用合理售后完善,十載實(shí)體公司更值得信賴。

crypto作為nodeJS已經(jīng)穩(wěn)定下來(lái)的模塊在整個(gè)node中具有舉足輕重的地位,一切app都需要加密解密,那么crypto就是一個(gè)提供加密功能的模塊。在這個(gè)模塊中已經(jīng)打包了OpenSSL hash, HMAC(哈希信息驗(yàn)證碼),cipher(加密),decipher(解密),sign(簽名)以及verify(驗(yàn)證)的功能。

無(wú)法反編譯的加密方式

話不多說(shuō)直接上代碼品鑒吧

onst crypto = require('crypto');
function l(param) {
  console.log(param);
}
const md5 = crypto.createHash('md5');//創(chuàng)建一個(gè)md5 hash算法
md5.update('aa');//添加要轉(zhuǎn)化的值
md5.update('cc');//與前面的要轉(zhuǎn)化的值進(jìn)行拼接
l(md5.digest('hex'));//打印16進(jìn)制的密文,
const sha1 = crypto.createHash('sha1');//創(chuàng)建一個(gè)sh2 hash算法
sha1.update('bbbb');
l(sha1.digest('hex'));
const hmac = crypto.createHmac('md5', 'key');//創(chuàng)建一個(gè)帶秘鑰的sha1或者md5算法
hmac.update('aacc');
l(hmac.digest('hex'));

最后的輸出為

aa794f68b4f6ae5e590e9ed34e94d639
8aed1322e5450badb078e1fb60a817a1df25a2ca
b03d8471e2c5f212289c3e2dcb95bd47

真真的輸出了一堆16進(jìn)制的字符但是簡(jiǎn)單生成個(gè)密文看來(lái)是很麻煩了。

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

可以反編譯的加密算法

//AES 對(duì)稱加密算法的一種。
//創(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 = '我是一個(gè)大傻瓜';
var key = 'keykey';
l(aesEncode(data, key));
l(data);
l(aesDecode(aesEncode(data, key), key));

最終輸出

3094e920cf4208e9cf1b209d4be9a2f018541c70db89b4e4fdcf3bda12d3abc7
我是一個(gè)大傻瓜
我是一個(gè)大傻瓜

這個(gè)的話感覺(jué)可以用于一般的密文通信。

DH協(xié)商秘鑰算法

在http下真叫別人抓包了,所有的信息就泄露了,就算是你用密文通信,開(kāi)始需要個(gè)key來(lái)解碼呀,這個(gè)key不可能用意念傳輸還是需要來(lái)通過(guò)網(wǎng)絡(luò)傳輸才行,所以還是又被黑的可能性,于是乎就產(chǎn)生了一個(gè)神奇的秘鑰算法,兩臺(tái)機(jī)器之間只需要傳遞幾個(gè)值便可以相互知道最終的秘鑰,而就算是這些傳遞的值被抓走了,也無(wú)法破譯最終秘鑰因?yàn)殛P(guān)鍵的幾個(gè)值只存儲(chǔ)于終端上不在傳輸流通。

好了上代碼

//DH算法協(xié)商秘鑰
/**
 * 主動(dòng)方使用的協(xié)商方法
 * @returns array():say是要傳達(dá)給被動(dòng)方的三個(gè)數(shù)據(jù) one是自己要用的一個(gè)數(shù)據(jù)
 */
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];
}
/**
 * 被動(dòng)方使用的協(xié)商方法已經(jīng)可以得到秘鑰
 * @param {prime: prime, generator: generoter, one_key: one_key} props 
 * @returns array() two_key是要返回給主動(dòng)方的秘?cái)?shù),theSecret是計(jì)算出來(lái)的秘鑰
 */
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 ];
}
/**
 * 主動(dòng)方收到被動(dòng)方給予的秘鑰后
 * @param str two_key 被動(dòng)方返回的密數(shù)
 * @param str one 主動(dòng)方最初的隨機(jī)數(shù)
 * @returns str 計(jì)算出來(lái)的秘鑰
 */
function dhOneGet(two_key,one){
return (one.computeSecret(two_key)).toString('hex');
}
//主動(dòng)方自己產(chǎn)生數(shù)據(jù)
var oneSay=dhOneSay();
//被動(dòng)方接受主動(dòng)方傳過(guò)來(lái)的數(shù)據(jù)進(jìn)行計(jì)算,產(chǎn)生握手?jǐn)?shù)據(jù)和最終的秘鑰
var twoGetSay=dhTwoGetSay(oneSay[0]);
//主動(dòng)方接收到被動(dòng)方傳來(lái)的數(shù)據(jù)進(jìn)行計(jì)算得到最終秘鑰
var oneSecret=dhOneGet(twoGetSay[0],oneSay[1]);
//被動(dòng)方的秘鑰早已產(chǎn)生了直接讀取
var twoSecret=twoGetSay[1];
l(oneSay);
l(twoGetSay);
l(oneSecret);
l(twoSecret);

最終結(jié)果是

[ { 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

以上就是crypto模塊如何在node.js中使用,小編相信有部分知識(shí)點(diǎn)可能是我們?nèi)粘9ぷ鲿?huì)見(jiàn)到或用到的。希望你能通過(guò)這篇文章學(xué)到更多知識(shí)。更多詳情敬請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

本文名稱:crypto模塊如何在node.js中使用
當(dāng)前路徑:http://jinyejixie.com/article28/iicccp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供動(dòng)態(tài)網(wǎng)站、靜態(tài)網(wǎng)站、微信公眾號(hào)做網(wǎng)站、面包屑導(dǎo)航品牌網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

網(wǎng)站優(yōu)化排名
辉南县| 平武县| 惠水县| 繁峙县| 电白县| 托克逊县| 湄潭县| 手游| 西贡区| 密云县| 旬邑县| 青神县| 湄潭县| 湖南省| 周宁县| 丰县| 时尚| 东明县| 堆龙德庆县| 新闻| 松潘县| 南安市| 开远市| 囊谦县| 泌阳县| 铜川市| 馆陶县| 屏东县| 喀喇沁旗| 博白县| 重庆市| 铜陵市| 西华县| 淮滨县| 泸溪县| 高唐县| 兰考县| 满洲里市| 呼伦贝尔市| 连城县| 灌云县|