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加密要快几百倍

转载于:https://www.cnblogs.com/muamaker/p/9707775.html

在 Nuxt.js 中使用 RSA 非对称加密可以通过引入 Node.js 的 crypto 模块来实现。具体的实现步骤如下: 1. 在 Nuxt.js 项目中安装 crypto 模块,可以使用 npm 或 yarn 命令进行安装: ``` npm install crypto ``` 或 ``` yarn add crypto ``` 2. 在需要使用 RSA 非对称加密的地方引入 crypto 模块: ```js const crypto = require('crypto'); ``` 3. 生成 RSA 密钥对,可以使用 crypto 模块中的 `generateKeyPairSync()` 方法: ```js const { publicKey, privateKey } = crypto.generateKeyPairSync('rsa', { modulusLength: 2048, publicKeyEncoding: { type: 'spki', format: 'pem' }, privateKeyEncoding: { type: 'pkcs8', format: 'pem' } }); ``` 此时,我们就可以得到一个包含公钥和私钥的密钥对了。 4. 使用公钥进行加密,可以使用 crypto 模块中的 `publicEncrypt()` 方法: ```js const data = 'hello world'; const encrypted = crypto.publicEncrypt(publicKey, Buffer.from(data)).toString('base64'); console.log(encrypted); // 输出加密后的数据 ``` 5. 使用私钥进行解密,可以使用 crypto 模块中的 `privateDecrypt()` 方法: ```js const decrypted = crypto.privateDecrypt(privateKey, Buffer.from(encrypted, 'base64')).toString(); console.log(decrypted); // 输出解密后的数据 ``` 以上就是在 Nuxt.js 中使用 RSA 非对称加密的基本步骤。需要注意的是,加密和解密的过程都需要保护密钥的安全,避免密钥泄露导致加密数据的安全性受到威胁。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值