node-rsa RSA加解密

日期: 2020-06-08         浏览量: 5141

使用 node-rsa 实现数据加解密


一.  生成密钥



    // 公私密钥生成
    const key = new NodeRsa({ b: 2048 }); // 生成2048位的密钥
    const publicDer = key.exportKey('pkcs1-public-pem'); // 公钥
    const privateDer = key.exportKey('pkcs1-private-pem'); // 私钥

    console.log('公钥', publicDer);
    console.log('================');
    console.log('私钥', privateDer);



二. 验签数据



    // 模拟数据
    const str = JSON.stringify({
      emsisdn: '90104658',
      campaign_id: '300ca8ab1be8e87250c3'
    });

    // 加密数据
    const privateKey = new NodeRsa(this.smRsakey.privateKey); // 私钥
    const publicKey = new NodeRsa(this.smRsakey.publicKey);  // 公钥

    // 验签数据
    const sign = privateKey.sign(str, 'base64', 'utf8'); // 私钥签名
    const check = publicKey.verify(str, sign, 'utf8', 'base64'); // 公钥验签
    console.log('私钥加签:', sign);
    console.log('公钥验签', check);



三. 加解密数据



    publicKey.setOptions({ encryptionScheme: 'pkcs1' });
    const encrypted = publicKey.encrypt(str, 'base64');
    privateKey.setOptions({
      encryptionScheme: 'pkcs1'
    });
    const decrypted = privateKey.decrypt(encrypted, 'utf8');
    console.log('加密数据:', encrypted);
    console.log('解密数据', decrypted);




四. 其他格式密钥生成及加解密demo



    

    // 公私密钥生成
    const key = new NodeRsa({ b: 1024 }); // 生成1024位的密钥
    key.setOptions({ encryptionScheme: 'pkcs1' });
    let publicDer = key.exportKey('public-der'); // 公钥
    let privateDer = key.exportKey('pkcs8-private-der'); // 私钥

    publicDer = publicDer.toString('base64');
    privateDer = privateDer.toString('base64');

    console.log('公钥', publicDer);
    console.log('================');
    console.log('私钥', privateDer);

    // 加解密
    const str = JSON.stringify({ phone: '18811126599' }); // 测试数据

    const privateKey = new NodeRsa(
      `-----BEGIN PRIVATE KEY-----
      ${privateDer}
      -----END PRIVATE KEY-----`,
      'pkcs8-private'
    ); // 私钥

    const publicKey = new NodeRsa(
      `-----BEGIN PUBLIC KEY-----
      ${publicDer}
      -----END PUBLIC KEY-----`,
      'pkcs8-public'
    ); // 公钥

    publicKey.setOptions({ encryptionScheme: 'pkcs1' });
    const encrypted = publicKey.encrypt(str, 'base64'); // 加密
    privateKey.setOptions({
      encryptionScheme: 'pkcs1'
    });
    const decrypted = privateKey.decrypt(encrypted, 'utf8'); // 解密

    console.log('加密数据' + encrypted);
    console.log('========================');
    console.log('解密数据' + decrypted);