node.js下使用RSA加密事例(windows)


1.安裝openss

直接下載window下的安裝包

http://houjixin.blog.163.com/blog/static/3562841020144143494875/

以我發博文現在的例子說明,大家都是64位操作系統吧。

選擇最新版本的win64版本,體積更大的33MB的安裝程序下載安裝吧

選擇安裝目錄傻瓜安裝下一步下一步一直到完成

2.生成RSA密鑰文件 我安裝到了C:\OpenSSL-Win64下  到C:\OpenSSL-Win64\bin目錄下點擊openssl.exe

啟動后輸入genrsa -out rsa_private_key.pem 1024 回車

此時,我們可以在bin文件夾中看到一個文件名為rsa_private_key.pem的文件,用記事本方式打開它,可以看到-----BEGIN RSA PRIVATE KEY-----開頭,-----END RSA PRIVATE KEY-----結尾的沒有換行的字符串,這個就是原始的私鑰。

 

3.把RSA私鑰轉換成PKCS8格式

使用cmd cd到目錄去執行命令 ,調整cmd命令框的寬度,為什么不直接點openssl.exe 我下面說

輸入命令pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM –nocrypt,並回車
得到生成功的結果,這個結果就是PKCS8格式的私鑰

 

(如果上面不用cmd中執行openssl.exe,你會發現無法復制完整轉換后的文件)

 右鍵點擊openssl窗口上邊邊緣,選擇編輯→標記,選中要復制的文字(如上圖),
此時繼續右鍵點擊openssl窗口上邊邊緣,選擇編輯→復制,
把復制的內容粘土進一個新的記事本中,重命名為rsa_private.key文件,只要知道這個是PKCS8格式的私鑰即可

 

 4.生成公鑰

 輸入命令rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem,並回車,
得到生成成功的結果,如下圖:

 

5.node.js實例,使用了第三方庫node-rsa

var NodeRSA = require('node-rsa');
var fs= require('fs');  

var onerror =(e) =>{
	console.log("解密失敗");

}
var onfinally =() =>{
	console.log("最終做什么");
}


fs.readFile('rsa_private.key','utf-8',function(err,data){  
    if(err){  
        console.log(data);  
    }else{  
        console.log(data);  
		privatekey= new NodeRSA(data);

			var text = 'Hello RSA!';
			var encrypted = privatekey.encrypt(text, 'base64');
			console.log('加密encrypted: ', encrypted);
			var decrypted = privatekey.decrypt(encrypted, 'utf8');
			console.log('解密decrypted: ', decrypted);

			var encrypted1 ='mIJocRfF+MWS3J6+fkPSM9ZAMSZhXxHC+/w0UuT+t6ZmLnoamQ6WKwOBPQ+o+mazk61MFdyImWVW+51dYLc7kE4Eey4y+qB23/ahC9Mi/bJqivWgUHeLPjfLMqXcNVrFSbOB33+7N/fsWAWLJmHuFHaNwP1DqPLH9nY501qoMvY=';
			var decrypted = privatekey.decrypt(encrypted1, 'utf8');
			console.log('使用正確的加密串解密decrypted: ', decrypted);

			try{
				var encrypted2 ='c7kE4Eey4y+qB23/ahC9Mi/bJqivWgUHeLPjfLMqXcNVrFSbOB33+7N/fsWAWLJmHuFHaNwP1DqPLH9nY501qoMvY=';
				var decrypted = privatekey.decrypt(encrypted2, 'utf8');
				
			}catch(e){
				onerror(e);
			}finally{
				onfinally();
			}

    }  
})  

  

6.私鑰文件如何放置到全局變量中,閉包寫的,有改進意見可提出,歡迎吐槽,當然也可以放到redis或者memcache中

RSAkey.js

var fs= require('fs');
var path = require('path');

module.exports = (function(){
    var private = '';//在函數內聲明一個變量,作用域是函數內

    return function(){ //返回的一個function能訪問到_value,所以_value並不是global級別的變量,但是可以通過這個接口訪問到
        if(private=='') {
            var paths = path.resolve(__dirname,'../rsa_private.key');
            fs.readFile(paths, 'utf-8', function (err, data) {
                private = data;
                if(private.length!=0){
                    console.log("success read RSA file");
                }
                return private;
            });
        }else{
            return private;
        }
    };

})();//一個立即執行的匿名函數

 

初始化的時候引入

var RSAkey = require('./util/RSAkey');

var key = RSAkey();

 

調用時候引入

var key = RSAkey(); 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM