您好,登錄后才能下訂單哦!
這篇文章主要介紹“Nodejs中crypto模塊的用法”,在日常操作中,相信很多人在Nodejs中crypto模塊的用法問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Nodejs中crypto模塊的用法”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
crypto是node.js中實現加密和解密的模塊,下面本篇文章帶大家了解一下crypto模塊,介紹一下利用crypto模塊進行散列(哈希)算法、HMAC算法、對稱加密、非對稱加密的方法。
crypto
是node.js
中實現加密和解密的模塊,在node.js
中,使用OpenSSL
類庫作為內部實現加密解密的手段, OpenSSL
是一個經過嚴格測試的可靠的加密與解密算法的實現工具。【推薦學習:《nodejs 教程》】
windows版openSSL下載
http://dl.pconline.com.cn/download/355862-1.html
散列算法也叫哈希算法,用來把任意長度的輸入變換成固定長度的輸出,常見的有md5,sha1等
相同的輸入會產生相同的輸出
不同的輸出會產生不同的輸出
任意的輸入長度輸出長度是相同的
不能從輸出推算出輸入的值
console.log(crypto.getHashes());
crypto.createHash(algorithm);//創建HASH對象 hash.update(data,[input_encoding]);//增加要添加摘要的數據,摘要輸出前可以使用多次update hash.digest([encoding]);//輸出摘要內容,輸出后則不能再添加摘要內容
var crypto = require('crypto'); var md5 = crypto.createHash('md5');//返回哈希算法 var md5Sum = md5.update('hello');//指定要摘要的原始內容,可以在摘要被輸出之前使用多次update方法來添加摘要內容 var result = md5Sum.digest('hex');//摘要輸出,在使用digest方法之后不能再向hash對象追加摘要內容。 console.log(result);
多次update
var fs = require('fs'); var shasum = crypto.createHash('sha1');//返回sha1哈希算法 var rs = fs.createReadStream('./readme.txt'); rs.on('data', function (data) { shasum.update(data);//指定要摘要的原始內容,可以在摘要被輸出之前使用多次update方法來添加摘要內容 }); rs.on('end', function () { var result = shasum.digest('hex');//摘要輸出,在使用digest方法之后不能再向hash對象追加摘要內容。 console.log(result); })
HMAC算法將散列算法與一個密鑰結合在一起,以阻止對簽名完整性的破壞
let hmac crypto.createHmac(algorithm,key); hmac.update(data);
algorithm 是一個可用的摘要算法,例如 sha1、md5、sha256
key為一個字符串,用于指定一個PEM格式的密鑰
PEM是OpenSSL的標準格式,OpenSSL使用PEM文件格式存儲證書和密鑰,是基于Base64編碼的證書。
$ openssl genrsa -out rsa_private.key 1024
let pem = fs.readFileSync(path.join(__dirname, './rsa_private.key')); let key = pem.toString('ascii'); let hmac = crypto.createHmac('sha1', key); let rs = fs.createReadStream(path.join(__dirname, './1.txt')); rs.on('data', function (data) { hmac.update(data); }); rs.on('end', function () { let result = hmac.digest('hex'); console.log(result); });
blowfish算法是一種對稱的加密算法,對稱的意思就是加密和解密使用的是同一個密鑰。
var crypto = require('crypto'); var fs = require('fs'); let str = 'hello'; let cipher = crypto.createCipher('blowfish', fs.readFileSync(path.join(__dirname, 'rsa_private.key'))); let encry = cipher.update(str, 'utf8','hex'); encry += cipher.final('hex'); console.log(encry); let deciper = crypto.createDecipher('blowfish', fs.readFileSync(path.join(__dirname, 'rsa_private.key'))); let deEncry = deciper.update(encry, 'hex','utf8'); deEncry += deciper.final('utf8'); console.log(deEncry);
非對稱加密算法需要兩個密鑰:公開密鑰(publickey)和私有密鑰(privatekey)
公鑰與私鑰是一對,如果用公鑰對數據進行加密,只有用對應的私鑰才能解密,如果私鑰加密,只能公鑰解密
因為加密和解密使用的是兩個不同的密鑰,所以這種算法叫作非對稱加密算法
為私鑰創建公鑰
openssl rsa -in rsa_private.key -pubout -out rsa_public.key
var crypto = require('crypto'); var fs = require('fs'); let key = fs.readFileSync(path.join(__dirname, 'rsa_private.key')); let cert = fs.readFileSync(path.join(__dirname, 'rsa_public.key')); let secret = crypto.publicEncrypt(cert, buffer);//公鑰加密 let result = crypto.privateDecrypt(key, secret);//私鑰解密 console.log(result.toString());
在網絡中,私鑰的擁有者可以在一段數據被發送之前先對數據進行簽名得到一個簽名 通過網絡把此數據發送給數據接收者之后,數據的接收者可以通過公鑰來對該簽名進行驗證,以確保這段數據是私鑰的擁有者所發出的原始數據,且在網絡中的傳輸過程中未被修改。
let private = fs.readFileSync(path.join(__dirname, 'rsa_private.key'), 'ascii'); let public = fs.readFileSync(path.join(__dirname, 'rsa_public.key'), 'ascii'); let str = 'zhufengpeixun'; let sign = crypto.createSign('RSA-SHA256'); sign.update(str); let signed = sign.sign(private, 'hex'); let verify = crypto.createVerify('RSA-SHA256'); verify.update(str); let verifyResult = verify.verify(public,signed,'hex'); //true
到此,關于“Nodejs中crypto模塊的用法”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。