前言刚刚在SegmentFault上回答了一位师兄的问题《非对称解密出错》。这属于Node.js在安全方面的应用。应该有很多人遇到过同样的问题。根据回答的问题,这里是一个简短的总结。关于非对称加密的理论知识,可以参考笔者之前的文章《NODEJS进阶:CRYPTO模块之理论篇》。完整代码可以在《Nodejs学习笔记》找到,欢迎关注程序原小卡的GitHub。加解密方式在Node.js中,负责安全的模块是crypto。在非对称加密中,公钥加密,私钥解密,加解密对应的API如下。加密函数:crypto.publicEncrypt(key,buffer)解密函数:crypto.privateDecrypt(privateKey,buffer)入门示例假定以下utils.js//utils.jsconstcrypto=require('crypto');//加密方法导出.encrypt=(data,key)=>{//注意第二个参数是Buffer类型returncrypto.publicEncrypt(key,Buffer.from(data));};//解密方法exports.decrypt=(encrypted,key)=>{//注意encrypted是一个Buffer类型returncrypto.privateDecrypt(key,encrypted);};测试代码app.js:constutils=require('./utils');constkeys=require('./keys');constplainText='大家好,我是程序员小卡';constcrypted=utils.encrypt(plainText,keys.pubKey);//加密constdecrypted=utils.decrypt(crypted,keys.privKey);//解密console.log(decrypted.toString());//Hello,Iamaprogrammer,Xiaokaattachesthepublickeyandprivatekeykeys.js:exports.privKey=`-----BEGINRSAPRIVATEKEY-----MIICXQIBAAKBgQDFWnl8fChyKI/Tgo1ILB+IlGr8ZECKnnO8XRDwttBbf5EmG0qV8gs0aGkh649rb75I+tMu2JSNuVj61CncL/7Ct2kAZ6CZZo1vYgtzhlFnxd4V7Ra+aIwLZaXT/h3eE+/cFsL4VAJI5wXh4Mq4Vtu7uEjeogAOgXACaIqiFyrk3wIDAQABAoGBAKdrunYlqfY2fNUVAqAAdnvaVOxqa+psw4g/d3iNzjJhBRTLwDl2TZUXImEZQeEFueqVhoROTa/xVg/r3tshiD/QC71EfmPVBjBQJJIvJUbjtZJ/O+L2WxqzSvqewzYaTm6Te3kZeG/cULNMIL+xU7XsUmslbGPAurYmHA1jNKFpAkEA48aUogSv8VFnR2QuYmilz20LkCzffK2aq2+9iSz1ZjCvo+iuFt71Y3+etWomzcZCuJ5sn0w7lcSxnqyzCFDspQJBAN3O2VdQF3gua0Q5VHmK9AvsoXLmCfRa1RiKuFOtrtC609RfX4DCFxDxH09UVu/8Hmdau8t6OFExcBriIYJQwDMCQQCZLjFDDHfuiFo2js8K62mnJ6SBH0xlIrND2+/RUuTuBov4ZUC+rM7GTUtEodDazhyM4C4Yq0HfJNp25Zm5XALpAkBGatLpO04YI3R+dkzxQUH1PyyKU6m5X9TjM7cNKcikD4wMkjK5p+S2xjYQc1AeZEYqvc187dJPRIi4oC3PN1+tAkBuW51/5vBj+zmd73mVcTt28OmSKOX6kU29F0lvEh8IoHiLOo285vG5ZtmXiY58tAiPVQXa7eU8hPQHTHWa9qp6-----ENDRSAPRIVATEKEY-----`;exports.pubKey=`-----BEGINPUBLICKEY-----MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDFWnl8fChyKI/Tgo1ILB+IlGr8ZECKnnO8XRDwttBbf5EmG0qV8gs0aGkh649rb75I+tMu2JSNuVj61CncL/7Ct2kAZ6CZZo1vYgtzhlFnxd4V7Ra+aIwLZaXT/h3eE+/cFsL4VAJI5wXh4Mq4Vtu7uEjeogAOgXACaIqiFyrk3wIDAQAB-----ENDPUBLICKEY-----`;综上所述,我们可以看出通过Node.js进行非对称加解密还是比较方便的。更多用法可以参考官方文档。相关链接程序员小卡的GitHubNodejs学习笔记非对称解密错误https://nodejs.org/api/crypto.html
