浏览器端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

原文链接:segmentfault.com

上一篇:一个主板维修大佬转行的Java的成长经历,心酸......
下一篇:js 遍历汉字,Unicode编码转汉字

相关推荐

  • (详解)从浏览器输入 URL 到页面展示过程

    引言 对于面试常问的从浏览器输入 URL 到页面渲染过程发生了什么?,我想大家都或多或少能说出一二。但是,其实这个问题很有深度,而你是否回答的有深度,在很大程度上会影响到面试官对你的印象。

    7 个月前
  • (HTML)下载PDF文件,而不是在浏览器中单击时打开它们。

    MikeD404Error提出了一个问题:(HTML) Download a PDF file instead of opening them in browser when clicked,或许与您...

    3 年前
  • 高性能现代浏览器超大wav音频的波形绘制方案

    在绘制大音频波形的场景(目前只支持wav格式),急着用的同学点这里,如果有问题可以联系我,我会尽快修复。github: https://github.com/CofeeWithR... 效果图 传统...

    1 年前
  • 面试题整理- 浏览器篇

    浏览器篇 localstorage sessionstorage cookie 区别 大小限制?(某团) 生命周期: cookie:可设置失效时间,没有设置的话,默认是关闭浏览器后失效 localSt...

    6 个月前
  • 面试官问我:说说你对浏览器缓存的理解

    缓存类型 强缓存 定义: 当发起HTTP请求时,不会向服务器进行请求,只要当前时间在缓存有效期内,则直接从客户端缓存中获得,当缓存过期之后,才会真正想服务器发起请求重新获得资源。

    3 个月前
  • 隐藏火狐和谷歌浏览器滚动条

    有时候想要实现滚动条隐藏,但是还是可以滚动内容的效果 怎么实现呢? 谷歌浏览器webkit &::-webkit-scrollbar { display: none; }火狐浏览...

    1 年前
  • 除夕小谈浏览器缓存

    更好的阅读体验 => 点击文末左下角的阅读原文 什么是浏览器缓存? Browser Caching 是浏览器将网络资源存储在本地的一种行为。优点有: 减少冗余数据的传输 减轻服务器的压力...

    2 年前
  • 阻止浏览器加载拖放文件

    dtbarneTravis提出了一个问题:Prevent browser from loading a drag-and-dropped file,或许与您遇到的问题类似。

    3 年前
  • 防止长时间运行的JavaScript锁定浏览器

    William Hurst提出了一个问题:Prevent long running javascript from locking up browser,或许与您遇到的问题类似。

    3 年前
  • 防止自动浏览器滚动刷新

    ThomasReggi提出了一个问题:Prevent automatic browser scroll on refresh,或许与您遇到的问题类似。 回答者mrtsherman给出了该问题的处理方式...

    3 年前

官方社区

扫码加入 JavaScript 社区