专栏首页黒之染开发日记浏览器端rsa加密方案

浏览器端rsa加密方案

并没有体验多少库,只看了一个npm里最多人用的一个库:

node-forge接口文档

前端代码

// 他们github有提供 forge.min.js , 不用webpack的项目也可以直接引用
import forge from 'node-forge'

const message = '要加密我了' // 原文长度有限制,而且中文还要url编码,所以不能加密太长的字符串。一般也只用来加密密码。
const publicKey = '-----BEGIN PUBLIC KEY-----\nMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCqM+l9ZWy1Frt6felFFLmfZNls\nVbU1dKpF8Rx83FtKCsztO5k/iV5N9BbfHFUg9Y40b/EK2j/BPc1xlLYAHMXn6563\nXCwZ4IuCxvfOwz9qT9gkKBxkI5b0rnikkSWTGlJEk2PdZ7Plc73Fa+bx3PvuKvMd\ncKWvd80+vt9+b/7hrwIDAQAB\n-----END PUBLIC KEY-----'
const publicK = forge.pki.publicKeyFromPem(publicKey)
const encrypted = publicK.encrypt(encodeURIComponent(message), 'RSA-OAEP') // 经过url编码,后端解密后需要url解码
console.log('密文:', encrypted) // 虽然乱码,但可以直接发给后端解密

ps. 以上代码建议使用try,因为加密中如果出现问题,会throw Error

nodejs端代码

const forge = require('node-forge')
const privateKey = '-----BEGIN PRIVATE KEY-----\nMIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAKoz6X1lbLUWu3p9\n6UUUuZ9k2WxVtTV0qkXxHHzcW0oKzO07mT+JXk30Ft8cVSD1jjRv8QraP8E9zXGU\ntgAcxefrnrdcLBngi4LG987DP2pP2CQoHGQjlvSueKSRJZMaUkSTY91ns+VzvcVr\n5vHc++4q8x1wpa93zT6+335v/uGvAgMBAAECgYArxUnou6qnL39rUvIol9ncyfy4\nRZpicuxPLGCdI7Y+ZmSpJciVdGhSN9Gh8xFZdozpo1gj6Fi5A4HQEeR0RvIF9Rgh\nERblj1rRWqxPcsIddOO9VaknQPICWKqEW9+E1bEcyNUblCHA4LGyQwmuEFUb/Tkj\nxAghIHuEBCe0GFiVwQJBAN5i5QSoOIpdFHA0c981E4VhHc/muXwjx1HfE1pcuuFb\nTy3OwEoZdFp3LIjBnBkPRneLTNjo5WTIwrmfsy6VDF8CQQDD7c6d/nKiJwIESlr+\n/idqXAPNR/iS1YX3Nqtk9jgrgf5zULHr2nbk7MDas5S9Z9XPdUmxtnP44dhoGvDk\nzyyxAkB7XBxyQuZqSkvGGjKUhJq5iC/DXddSd35fegEARSQdUktPu7qK4Cfc7vKz\nQcLXW9PZCFqukDJ/f6YU1fPNSTy9AkADQ78hms/GK+g4shR6EzoM56OYlA5sQ+qL\nh/mrIP8mmm/m8/1C9MzuW5OLEVr1HPnPDyE/OM8N4pV8hpZk+Z7BAkEAzaFstazA\nxLzZOBWhvOzzo722glZ7HVezhMocLu7Y3EOXP/nbx09JpU3U7Egp5UVp0aiknh/Q\nez4Cc4ksMedxdA==\n-----END PRIVATE KEY-----\n'
const privateK = forge.pki.privateKeyFromPem(privateKey)
const decrypted = privateK.decrypt(encrypted, 'RSA-OAEP') // encrypted 为前端传过来的密文
console.log('原文:', decodeURIComponent(decrypted)) // decrypted 为原文

ps. 以上代码建议使用try,因为解密中如果出现问题,会throw Error

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • mac os10.10 配置Apache2.4问题解决方案

    因为最近要经常一个人加班,干脆拿自己的笔记本去工作,晚上可以直接回家里码代码好了,然后就想给mac装好环境。发现mac自带Apache,自带php,还自带svn...

    黒之染
  • 【vscode插件】获取当前激活的编辑器及其信息详解

    selection.active 当前光标位置 Position 类型 如果有选中的文本,这里是被选择文本的最后,细心的你会发现,选择了文本后,光标也是会存在的...

    黒之染
  • 安卓手机分享加密网络给其他设备使用,包括linux

    之前的ss被墙了,舍不得60rmb换IP,于是找了一个其他的加速器,只能用他们的客户端连。毫无意外,他们不出linux的客户端,还好他们出安卓客户端,我手机也是...

    黒之染
  • WGCNA关键模块和hub基因筛选

    WGCNA的理论背景知识 WGCNA的详细分析流程 关键模块和hub基因筛选,在流程中并不可知 模块划分好后如何找到key module

    Y大宽
  • 本体技术视点 | Poly Network高效跨链助力DeFi

    密切关注本体动态的小伙伴们都知道,8月18日,由 Ontology 与 Neo、Switcheo 共同发布的全新跨链互操作性协议 Poly Network 主网...

    本体Ontology
  • linux基础篇01-测试常见linux命令集合二

    本篇主要接着上一篇文章继续就“测试常见linux命令集合二”进行展开讲解,主要包括“cp、scp、rmdir、rm、history”命令。希望感兴趣的小伙伴可以...

    IT苦逼一枚
  • linux之组管理

    绝命生
  • 云数据中心需要加密密钥的解决方案

    过去几年来,很多国家都制定了自己的数据驻留法,其中一些国家要求所有与其政府部门相关的数据必须存储在境内。欧盟各国以及俄罗斯、巴西和印度都是这种法律的主要支持者。...

    静一
  • 实战案例解读:数据分析,如何更进一步?

    “我是偏运营/业务分析的,复杂的分析算法我不会,还有什么方法能够对评价类数据做更深入分析吗?”

    用户2769421
  • 【Python 3 获取Word所有图片】

    上次讲到如何手动快速提取Word文档中的所有图片。这次我们用Python-3基于图片提取原理,写代码实现自动获取。

    用户6184845

扫码关注云+社区

领取腾讯云代金券