zoukankan      html  css  js  c++  java
  • NodeJS学习笔记 进阶 (13)Nodejs进阶:5分钟入门非对称加密用法

    个人总结:读完这篇文章需要5分钟,这篇文章讲解了Node.js非对称加密算法的实现。

    摘录自网络

    地址: https://github.com/chyingp/nodejs-learning-guide

    前言

    刚回答了SegmentFault上一个兄弟提的问题《非对称解密出错》。这个属于Node.js在安全上的应用,遇到同样问题的人应该不少,基于回答的问题,这里简单总结下。

    非对称加密的理论知识,可以参考笔者前面的文章《NODEJS进阶:CRYPTO模块之理论篇》

    完整的代码可以在 《Nodejs学习笔记》 找到,也欢迎大家关注 程序猿小卡的GitHub

    加密、解密方法

    在Node.js中,负责安全的模块是crypto。非对称加密中,公钥加密,私钥解密,加解密对应的API分别如下。

    加密函数:

    crypto.publicEncrypt(key, buffer)

    解密函数:

    crypto.privateDecrypt(privateKey, buffer)



    入门例子

    假设有如下utils.js

    // utils.js
    const crypto = require('crypto');
    
    // 加密方法
    exports.encrypt = (data, key) => {
      // 注意,第二个参数是Buffer类型
      return crypto.publicEncrypt(key, Buffer.from(data));
    };
    
    // 解密方法
    exports.decrypt = (encrypted, key) => {
      // 注意,encrypted是Buffer类型
      return crypto.privateDecrypt(key, encrypted);
    };

    测试代码app.js

    const utils = require('./utils');
    const keys = require('./keys');
    
    const plainText = '你好,我是程序猿小卡';
    const crypted = utils.encrypt(plainText, keys.pubKey); // 加密
    const decrypted = utils.decrypt(crypted, keys.privKey); // 解密
    
    console.log(decrypted.toString()); // 你好,我是程序猿小卡

    附上公钥、私钥 keys.js

    exports.privKey = `-----BEGIN RSA PRIVATE KEY-----
    MIICXQIBAAKBgQDFWnl8fChyKI/Tgo1ILB+IlGr8ZECKnnO8XRDwttBbf5EmG0qV
    8gs0aGkh649rb75I+tMu2JSNuVj61CncL/7Ct2kAZ6CZZo1vYgtzhlFnxd4V7Ra+
    aIwLZaXT/h3eE+/cFsL4VAJI5wXh4Mq4Vtu7uEjeogAOgXACaIqiFyrk3wIDAQAB
    AoGBAKdrunYlqfY2fNUVAqAAdnvaVOxqa+psw4g/d3iNzjJhBRTLwDl2TZUXImEZ
    QeEFueqVhoROTa/xVg/r3tshiD/QC71EfmPVBjBQJJIvJUbjtZJ/O+L2WxqzSvqe
    wzYaTm6Te3kZeG/cULNMIL+xU7XsUmslbGPAurYmHA1jNKFpAkEA48aUogSv8VFn
    R2QuYmilz20LkCzffK2aq2+9iSz1ZjCvo+iuFt71Y3+etWomzcZCuJ5sn0w7lcSx
    nqyzCFDspQJBAN3O2VdQF3gua0Q5VHmK9AvsoXLmCfRa1RiKuFOtrtC609RfX4DC
    FxDxH09UVu/8Hmdau8t6OFExcBriIYJQwDMCQQCZLjFDDHfuiFo2js8K62mnJ6SB
    H0xlIrND2+/RUuTuBov4ZUC+rM7GTUtEodDazhyM4C4Yq0HfJNp25Zm5XALpAkBG
    atLpO04YI3R+dkzxQUH1PyyKU6m5X9TjM7cNKcikD4wMkjK5p+S2xjYQc1AeZEYq
    vc187dJPRIi4oC3PN1+tAkBuW51/5vBj+zmd73mVcTt28OmSKOX6kU29F0lvEh8I
    oHiLOo285vG5ZtmXiY58tAiPVQXa7eU8hPQHTHWa9qp6
    -----END RSA PRIVATE KEY-----
    `;
    
    exports.pubKey = `-----BEGIN PUBLIC KEY-----
    MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDFWnl8fChyKI/Tgo1ILB+IlGr8
    ZECKnnO8XRDwttBbf5EmG0qV8gs0aGkh649rb75I+tMu2JSNuVj61CncL/7Ct2kA
    Z6CZZo1vYgtzhlFnxd4V7Ra+aIwLZaXT/h3eE+/cFsL4VAJI5wXh4Mq4Vtu7uEje
    ogAOgXACaIqiFyrk3wIDAQAB
    -----END PUBLIC KEY-----
    `;

    小结

    可以看到,通过Node.js进行非对称加密、解密还是挺方便的。更多用法,可以参考官方文档。

    相关链接

    程序猿小卡的GitHub

    Nodejs学习笔记

    非对称解密出错

    https://nodejs.org/api/crypto.html

    (14)、(15)

    • express进阶:多模板引擎支持
    • 基于 express + XHR 的跨域资源请求

  • 相关阅读:
    写了一个自动打包并发布到tomcat的脚本
    查看并更改mysql编码
    MyBatis无法根据中文条件查询出结果
    服务器端PHP多进程编程
    PHP-popen() 函数打开进程文件指针
    php并发处理
    PHP能得到你是从什么页面过来的,r…
    PHP如何解决网站大流量与高并发的…
    基于PHP的cURL快速入门
    Mysql内存表的用处
  • 原文地址:https://www.cnblogs.com/eret9616/p/9197968.html
Copyright © 2011-2022 走看看