• 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+'公钥:
    ',publicPem);
      console.log(pkcsType+'私钥:
    ', privatePem);
      
      //---------------------测试1:服务端私钥加密公钥解密------------------------
    
      //3.使用 私钥 加密 数据,并指定 字符编码 和 字符集
      var encryData = key.encryptPrivate('服务端测试 -> jameszou love code~~~', 'base64','utf8');
      console.log('
    私钥加密后的数据:
    ', encryData); //加密后数据为 base64 编码
    
      //4.使用 公钥 解密 数据,并指定字符集
      var decryptData = key.decryptPublic(encryData,'utf8');
      console.log('
    公钥解密后的数据:
    ', 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('
    使用公钥解密后的数据:
    ',decrypted);
    }
    
    generateKeyPair();
    

      

    使用  aes加密,是属于,指定key加密,还是用key加密,没有公钥和私钥的区别。

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

  • 相关阅读:
    Java new关键字的对象内存分配原理
    Android idleHandler
    Android Perffto工具
    Android Systrace工具
    Android TraceView工具
    Android App启动时间测量
    Android App启动分类
    Android线程的消息队列
    2018.2.28(延迟加载和缓存)
    2018.2.27(关联查询)
  • 原文地址:https://www.cnblogs.com/muamaker/p/9707775.html
Copyright © 2020-2023  润新知