RSA加密算法算法
寫在前面:網站
瞭解RSA算法的原理請查看下面的文章ui
一文搞懂 RSA 算法 來源:簡書 做者:somenzz加密
在使用 Node 進行 RSA 加密以前咱們首先須要獲取RSA公共和私有密鑰:spa
1.下載 OpenSSL命令行
兩個網址:一個是 官方網站 ,另外一個是社區整理網站code
2.安裝 OpenSSL ,查看下面的文章orm
OpenSSL下載安裝 來源:簡書 做者:涓涓細流_708dblog
3.使用 OpenSSL 生成 RSA 密鑰utf-8
a.打開命令行,進入到安裝OpenSSL的bin目錄下(個人是默認安裝到C盤)
cd C:\OpenSSL-Win64\bin
在命令行中執行
openssl genrsa -aes256 -out rsa-key.pem 2048
上面命令的意思是使用 aes256 進行加密,加密密鑰長度爲 2048 位,並將結果輸出到 res-key.pem 文件中,默認將生成的文件輸出到 bin 目錄下
執行完後是須要輸入密碼的,這個密碼是用來對RSA密鑰加密的
b.經過上面的加密文件 rsa-key.pem 生成私有密鑰 rsa-prv.pem
openssl rsa -in rsa-key.pem -outform PEM -out rsa-prv.pem
輸入以前生成加密文件時輸入的密碼
c.生成公共密鑰 rsa-pub.pem
openssl rsa -in rsa-key.pem -outform PEM -pubout -out rsa-pub.pem
經過上面生成的步驟生成私鑰和公鑰後,咱們就能夠使用Node的方式對文件進行rsa加密
使用 Node 對文件進行 RSA 加密:
'use strict'; const crypto = require('crypto'); const fs = require('fs'); //定義一個同步讀取文件的方法 let getFile = (file) => { try { let pubKey = fs.readFileSync(file, 'utf-8'); return pubKey; } catch(err) { console.log(err); return false; } } //讀取rsa公鑰 let pubKey = getFile('./rsa-pub.pem'); //讀取rsa加密私鑰 let prvKey = getFile('./rsa-prv.pem'); //讀取須要加密的文件 let data = getFile('./data.txt'); //使用私鑰加密,公鑰解密 const prv_enCrypt = crypto.privateEncrypt(prvKey, Buffer.from(data, 'utf-8') ); const pub_deCrypt = crypto.publicDecrypt(pubKey, prv_enCrypt, 'utf-8'); console.log('使用私鑰加密以後的文件: ' + prv_enCrypt.toString('hex')); console.log('使用公鑰解密以後的文件: ' + pub_deCrypt.toString()); //除了能夠使用私鑰加密公鑰解密外還能夠使用私鑰加密公鑰解密 const pub_enCrypt = crypto.publicEncrypt(pubKey, Buffer.from(data, 'utf-8')); const prv_deCrypt = crypto.privateDecrypt(prvKey, pub_enCrypt); console.log('使用公鑰加密以後的文件: ' + pub_enCrypt.toString('hex')); console.log('使用私鑰解密以後的文件: ' + prv_deCrypt.toString()); //加密後的文件使用fs(文件系統模塊)導出 let exEncryptFile = fs.createWriteStream('./exEncryptFile.txt') exEncryptFile.write( prv_enCrypt.toString('hex') ); exEncryptFile.end();
注:
1.RSA的加密方法的第二個參數須要傳入 buffer 類型的數據
2.data.txt 文件是在同一目錄下須要加密的文件,記得在執行上面代碼的時候建立一個須要加密的文件
3.RSA加密方法便可以使用公鑰加密私鑰解密,也能夠使用私鑰加密公鑰解密