资讯专栏INFORMATION COLUMN

Node.js进阶:5分钟入门非对称加密方法

zhiwei / 2420人阅读

摘要:非对称加密的理论知识,可以参考笔者前面的文章进阶模块之理论篇。非对称加密中,公钥加密,私钥解密,加解密对应的分别如下。相关链接程序猿小卡的学习笔记非对称解密出错

前言

刚回答了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

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/11335.html

相关文章

  • SSL协议之数据加密过程详解

    摘要:前言总括原文博客地址协议之数据加密过程详解知乎专栏简书专题前端进击者知乎前端进击者简书博主博客地址的个人博客生活只要你听过,不可能没听过协议吧,协议是一种安全协议。 前言 总括: 原文博客地址:SSL协议之数据加密过程详解 知乎专栏&&简书专题:前端进击者(知乎)&&前端进击者(简书) 博主博客地址:Damonare的个人博客 生活 SSL 只要你听过HTTPS,不可能没听过...

    Seay 评论0 收藏0
  • Nodejs进阶:crypto模块中你需要掌握的安全基础知识

    摘要:加解密伪代码加密解密非对称加密又称公开秘钥加密。常见的非对称加密算法。通常来说对称加密速度要快于非对称加密。在之后的通讯阶段,可以使用对称加密算法对数据进行加密,秘钥则是握手阶段生成的。确认信息完整未被篡改。 一、 文章概述 互联网时代,网络上的数据量每天都在以惊人的速度增长。同时,各类网络安全问题层出不穷。在信息安全重要性日益凸显的今天,作为一名开发者,需要加强对安全的认识,并通过技...

    xzavier 评论0 收藏0
  • 检测工具进阶——结合静态分析的动态分析工具论文分享

    摘要:接下来,作者从密码算法的误用着手,针对一些常量,改进了静态分析工具。具体来说,就是在的基础上做了动态分析方法和静态分析方法相结合的策略,在线记录文件,离线检测分析,使得整个工具更加完善。 ...

    canger 评论0 收藏0
  • 基于Nginx的中间件架构(三):Rewrite规则、secure_link和Geoip读取地域信息

    摘要:相当于模拟了另一次请求。只会停留在当级下然后找,不会往下再查找对应的的规则或者匹配。临时重定向会重新向服务器发起请求。 上一篇:基于Nginx的中间件架构(二):代理服务、负载均衡、缓存服务、动静分离 一、Rewrite规则(常用) showImg(https://segmentfault.com/img/bV42Q7?w=374&h=88); 1.1 regex正则表达式 showI...

    awokezhou 评论0 收藏0
  • 如何理解比特币和区块链?

    摘要:比特币区块链无疑是当今业界的最热门的。目前,每个成功的矿工获得可能每年更换一次或通过比特币社区决策作为成功向区块链添加一块交易的奖励。填写其他详细信息,例如比特币金额和可选说明。 比特币区块链无疑是当今业界的最热门的。通过这篇博客,我将尽力向大家介绍加密货币比特币的概念,以及它如何创造我们称之为区块链的革命性技术。 这个问题经常引起混淆。这篇文章可以快速解释和清理这方面的混乱! 什么是...

    Kosmos 评论0 收藏0

发表评论

0条评论

zhiwei

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<