node-rsa 非對稱加密和解密


使用公鑰和私鑰的加密和解密:

    • 非對稱加密的關鍵在於 有 公鑰 / 私鑰
      用法:
      a.生成一對公鑰私鑰
      b.公鑰加密 -> 對應私鑰解密
      c.私鑰加密 -> 對應公鑰解密

    • 非對稱加密的常見應用方式
      a.公鑰加密,發給私鑰擁有者,私鑰解密獲得明文。其它人用公鑰解不開
      b.私鑰加密(簽名)

    • 公鑰的傳輸(混合加密)
      a.使用對稱加密算法發布公鑰
      b.使用對稱加密算法解密公鑰,再使用公鑰加密明文,發給私鑰擁有者

注:不能 公鑰加密公鑰解密 或 私鑰加密私鑰解密

var NodeRSA = require("node-rsa");

/** 
 * 1.使用 node-rsa 生成 公鑰和私鑰,並進行服務端測試
 * @param pkcsType :pkcs版本(pkcs1/pkcs8),默認為 pkcs8
 */
function generateKeyPair(pkcsType,pkcsSize) {
  pkcsType = pkcsType ? pkcsType : 'pkcs8';//不為空則 設置為傳入參數,為空則 設置為 pkcs8
  console.log('pkcsType=' + pkcsType);
  pkcsSize = pkcsSize || 512;
  //1.創建RSA對象,並指定 秘鑰長度
  var key = new NodeRSA({ b: pkcsSize });
  key.setOptions({ encryptionScheme: 'pkcs1' });//指定加密格式

  //2.生成 公鑰私鑰,使用 pkcs8標准,pem格式
  var publicPem = key.exportKey(pkcsType+'-public-pem');//制定輸出格式
  var privatePem = key.exportKey(pkcsType + '-private-pem');
  //console.log(key.$options);
  console.log(pkcsType+'公鑰:\n',publicPem);
  console.log(pkcsType+'私鑰:\n', privatePem);
  
  //---------------------測試1:服務端私鑰加密公鑰解密------------------------

  //3.使用 私鑰 加密 數據,並指定 字符編碼 和 字符集
  var encryData = key.encryptPrivate('服務端測試 -> jameszou love code~~~', 'base64','utf8');
  console.log('\n私鑰加密后的數據:\n', encryData); //加密后數據為 base64 編碼

  //4.使用 公鑰 解密 數據,並指定字符集
  var decryptData = key.decryptPublic(encryData,'utf8');
  console.log('\n公鑰解密后的數據:\n', decryptData);

  //---------------------測試2:服務端加載公鑰后解密------------------------
  //1.創建RSA對象,並指定 秘鑰長度
  var key3 = new NodeRSA({ b: pkcsSize });
  //2.導入 公鑰,並指定使用 pkcs標准,pem格式
  key3.importKey(publicPem, pkcsType+'-public-pem');

  //3.使用 公鑰 解密數據
  var decrypted = key3.decryptPublic(encryData, 'utf8');  
  console.log('\n使用公鑰解密后的數據:\n',decrypted);
}

generateKeyPair();

  

 

使用  aes加密,是屬於,指定key加密,還是用key加密,沒有公鑰和私鑰的區別。

但是:aes加密的速度比rsa加密要快幾百倍


免責聲明!

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



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