RSA 加密算法简介

一种比较常见的非对称加密算法,常用于前后端交互中的密码加密,前端使用公钥加密密码,后端使用私钥进行解密。公钥可对外开放,私钥是存放在服务端,外部正常情况下是拿不到解密私钥的。

以下为百度百科的部分解释:
RSA 公开密钥密码体制是一种使用不同的加密密钥与解密密钥,“由已知加密密钥推导出解密密钥在计算上是不可行的”密码体制。

在公开密钥密码体制中,加密密钥(即公开密钥)PK 是公开信息,而解密密钥(即秘密密钥)SK 是需要保密的。加密算法 E 和解密算法 D 也都是公开的。虽然解密密钥 SK 是由公开密钥 PK 决定的,但却不能根据 PK 计算出 SK

生成公钥,私钥

  1. goEncrypt
    直接调用 GetRsaKey 函数即可在本地生成一个私钥文件 private.pem,一个公钥文件 public.pem

    func main() {goEncrypt.GetRsaKey()
    }
    
  2. openssl
    生成私钥

    openssl genrsa -out rsa_1024_priv.pem 1024
    

    生成公钥

    openssl rsa -pubout -in rsa_1024_priv.pem -out rsa_1024_pub.pem
    

前端 js 使用公钥加密

首先引入主角:jsencrypt.min.js ,文件在 https://github.com/travist/jsencrypt 该仓库的 bin 目录下。

基本用法:

var encrypt = new JSEncrypt();
encrypt.setPublicKey(`-----BEGIN  WUMAN  RSA PUBLIC KEY -----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA29fttcEDUvhGJEhQXEIH
8blptZRF5itec4GtEGtkSr4Wjmsf2o2XKOr6YEbTOeDA/DdnDSbVzK2ZUscqyBxb
KGwI/Bpv9l5K/sh9+Oj2Y8YH53+XkqRSGvmhHqolhb+gcfH+FKG5IflGuiOREs4h
02TVmPAFPTmZjYBeVexJgmPodGPOe36QVnMeOG8tHOFxItkMvJUpilzs85xdHqTT
jWCtk/SjHrp5NGSkHSmionOtrFiksS/gTX0EzrptmAGHTjZV0NX7Nu8Ma45rVdMR
wXrDPbk0yR0iFdBEZ1ceGsNg2VjrZ3LCZi3zO+ieA7sBjHARHai5MuFlh9KJ8+Yk
wwIDAQAB
-----END  WUMAN  RSA PUBLIC KEY -----`);
var encrypted = encrypt.encrypt("test");

encrypted 即为加密后的字符串,是要传给后端的。test 使用公钥加密后为:mFWBdT4Y70ZNEQ7PVIFKwbkefufu52WGXYLrW0Vk1XuajrrEE54dqj4VK2yuGIeMq5bHKAdkDnACB2ABzHLQuobTDpkS0Nj5AlJvwbRDV3pOCB1x0q3aqEooTppeMs8P/WG3YCRDTQPWgZISPsFBQVT1tk77BiImcY4SZM9IL0B4TFUKS9sShnjAebxmJkj8jfYYh7gNzUY0YMvOV6HuiT5C0RsbTe1jwMyN87QEwvpvuPelkeQ8LX1AG+qsn2q4TvOYEKCNfNnePjMIQ/5MlesledwiqUpc/YtY3qj4Qx+8b5luaQ6kyu+zyOXV/A0XjjxIxqLWKU8eAl7eA3o72Q==

后端 go 使用私钥解密

主角:github.com/wumansgy/goEncrypt

注意: JSEncrypt 拿到的是经过 base64 转换后的,所以在这里我们得先将其进行一次 base64 转换。

基本用法:

package mainimport ("fmt""encoding/base64""github.com/wumansgy/goEncrypt"
)var privateKey = []byte(`-----BEGIN  WUMAN RSA PRIVATE KEY -----
MIIEpgIBAAKCAQEA29fttcEDUvhGJEhQXEIH8blptZRF5itec4GtEGtkSr4Wjmsf
2o2XKOr6YEbTOeDA/DdnDSbVzK2ZUscqyBxbKGwI/Bpv9l5K/sh9+Oj2Y8YH53+X
kqRSGvmhHqolhb+gcfH+FKG5IflGuiOREs4h02TVmPAFPTmZjYBeVexJgmPodGPO
e36QVnMeOG8tHOFxItkMvJUpilzs85xdHqTTjWCtk/SjHrp5NGSkHSmionOtrFik
sS/gTX0EzrptmAGHTjZV0NX7Nu8Ma45rVdMRwXrDPbk0yR0iFdBEZ1ceGsNg2Vjr
Z3LCZi3zO+ieA7sBjHARHai5MuFlh9KJ8+YkwwIDAQABAoIBAQCyBCtMXbqfWMMT
ZisMSbu9FPJwQlxHgR6+UWceQJe5nisNr9jfVH/udje/9hncaA5dLU+Y6rV9Q6U/
zl7qI2v9U14DJjU7PidkIF1BTQMWz6he4IaQC9cgWLsK5aP0pbL6EYY4lqwewodu
+pXisF/bmW8MpG7ZoOaiGixJT0hG97aS3YD506RqdnK4a9yG5ycoVUZTzFTIM+aq
MCTOWJLbHJBnY52v7Rqaor1jZ0o+C/Cykbts25VHWZ9ygxBfI/S75jTg/zibpqbo
TnICGBqzzfAsThHYiji3ZgEF2bSadxQZ956Rvm5Dlhk0A6ylwKl1gJTAxyZNRjx2
zogLHNFhAoGBAP3TmQSpyYtjr8xdD+AsinMi3q3p/6+FPBh5wrV9Dvd5aSrKCYnU
j/9LOYmCP6JfKc90K3L0PKTfS1LDZXHoeYpzxB0uD2iTIkYQKraUp7rzqLBMkdTB
nTuOByqnTB45WlWlfy6m/8CO+0r5DkrO1fU8gWkg3+bUQoUTPOhuFkqdAoGBAN25
1oVmFyDvxw62WZ95SPktqzmErFH/X+7wpGInUb0vxnGJ0SP2bVgMLyL9Ecz8p5hC
ZEZVbo/WFs17hqz8Z6Xx4Gq7aoredpsZswpApdODs5sQf72LXj4Cuf1iwMGIyQxa
8hElV9uRIeKfEG2E/HBLLPO8qhGBCsWIT1Jms97fAoGBAPQFIf2usTkVXCPvb9zH
VU79PfEanhoCz9SD8mGCWgomqaleVK8yMEFx8120XzLdpBdyCndYQJkMpqBpgzRw
F7C4PNkEuAGEOhX7YuTmox4DM7BR3H0aqetgTpl9/pqr7qGaGlwiZoubqhDYwRnA
IUfDpHIKDdcfRtgit5KIi1utAoGBAKqoAK8IFsEpDGMMgwq1hS8UsXdB4If0MNht
q3hInycoAGsfEjPF1f8w0Y7yjaLiy/PrFdb0pnZa544ch1nZo8Ub2AkOW0CrXUqf
iyhW/ctA0RqGpmszO8QqwRB/07CiIWw7C5maznaWzCfrGe/RraKYme63xYZXdfz3
n2Xi2oqtAoGBAPB2SL1UafzZiC70e+NeDeaCLTCorCvIrN73RngYXU1OKUynrcjL
xOs8yVFs5cK0sNwEkiozcldfOfU2j70tyrGz+txi5+Db6ex5VXmEKSqdZXRDtqqc
KKRFfpuebqdaR50SDa4Lq6JbqYtwg0CLZeju4Mq41i9F2p4myqVDUsZs
-----END  WUMAN RSA PRIVATE KEY -----
`)func main() {ciphertext, err := base64.StdEncoding.DecodeString(`mFWBdT4Y70ZNEQ7PVIFKwbkefufu52WGXYLrW0Vk1XuajrrEE54dqj4VK2yuGIeMq5bHKAdkDnACB2ABzHLQuobTDpkS0Nj5AlJvwbRDV3pOCB1x0q3aqEooTppeMs8P/WG3YCRDTQPWgZISPsFBQVT1tk77BiImcY4SZM9IL0B4TFUKS9sShnjAebxmJkj8jfYYh7gNzUY0YMvOV6HuiT5C0RsbTe1jwMyN87QEwvpvuPelkeQ8LX1AG+qsn2q4TvOYEKCNfNnePjMIQ/5MlesledwiqUpc/YtY3qj4Qx+8b5luaQ6kyu+zyOXV/A0XjjxIxqLWKU8eAl7eA3o72Q==`)if err != nil {return }plaintext, err := goEncrypt.RsaDecrypt(ciphertext, privateKey)if err != nil {return }fmt.Println("明文:", string(plaintext)) // test
}

参考

jsencrypt
goEncrypt
百度百科 RSA 算法

前后端交互,密码加密,RSA 实现前端 js 加密,后端 go 解密相关推荐

  1. 前端js调用后端API获取数据的三种方法(2022.7.25)

    前端js调用后台API获取数据的三种方法(2022.7.25) 前言 需求分析 一个Get实例 浏览器请求 SoapUI软件请求 一个Post实例 浏览器请求 SoapUI软件请求 1.Http简介( ...

  2. wed后端和java的区别_web前端和web后端的区别详细分析

    原标题:web前端和web后端的区别详细分析 在刚开始从事web开发时,首先要选准学习方向,看是想从事前端部分还是后端程序部分.当然在工作的后期,就不会分的那么细致了.做前端到后期也会懂一些后端的技术 ...

  3. python爬虫遇到js加密,python爬虫遇到JS加密,pyv8运行js,详细解密过程

    首先说一下什么是加密,所谓js加密大多出现在表单提交过程中,下面我将以中国电信为例,详细讲解如何利用pyv8来加密登录的密码.要说明的是pyv8目前仅仅支持python2,用的下伙伴要注意自己的pyt ...

  4. 【前端44_前后端交互_跨域】前端解决:JSONP、后端解决:CORS 、后端代理

    文章目录 跨域 什么是跨域 前端解决: JSONP 实现原理 步骤 前端:创建标签,拼接传递参数 后端:接收值,返回值 封装 Ajax 代码 在封装的 Ajax 中添加 JSONP 需求 思路 练习: ...

  5. hikaridatasource 加密后登陆不上_渗透测试 | 突破前端JS加密限制

    前言 现在前端开发为了提高爬虫的难度及加强安全性,都会在数据包提交前进行加密,最典型的就是传参加密,相信大家在测试的时候都遇到过,那么我们在抓取数据包并修改之后,修改之后的参数无法通过后端程序数据完整 ...

  6. 前后台系统(一、前端js和后端fcgi通信 )

    之前一直都好奇前后端是如何通信的,如果进行数据交互的,但是一直没有机会,直到最近,学习了一段时间的后端知识,然后又刚好遇到要做一个自动化工具,本来自动化工具的原理是通过配置文件传参的,不过呢,总感觉配 ...

  7. 加密基础知识二 非对称加密RSA算法和对称加密

    一.RSA的计算过程 上述过程中,出现了公钥(3233,17)和私钥(3233,2753),这两组数字是怎么找出来的呢?参考RSA算法原理(二) 首字母缩写说明:E是加密(Encryption)D是解 ...

  8. java后端js_后端传java复杂对象给前端js对象

    jsp界面中将后端的java复杂对象传递给前端js对象的方法: 用JSP表达式--加JSON数据转换 复杂对象需要转成JSON数据进行前后端传输,所以后端传值前.前端接收对象后都需要进行JSON数据处 ...

  9. aes前端js加密及后台解密

    1. 加载js <script src="https://cx-a.com/zy/js/aes.js"></script> <script src=& ...

最新文章

  1. java-第九章-循环结构进阶-三个班级每班4位同学成绩大于85的算平均分.
  2. 中国移动基于ARM/x86服务器的Ceph性能对比
  3. storage.googleapis.com 访问与下载慢
  4. 7天拿到阿里Android岗位offer,都是精髓!
  5. 超轻型的数据库sqlite
  6. wstring和string简单正则表达式使用
  7. c语言转义字符%,c语言转义字符
  8. 2.1 Mini-batch 梯度下降法
  9. 全球首发!惯性导航导论(剑桥大学)第七部分
  10. mysql索引怎么设计_mysql索引设计
  11. 历史数据导出excel_在数据产品中对导出功能的思考
  12. game with probability problem
  13. allure 测试报告本地打开_自动化测试报告太丑?信息实用的Allure Report测试报告拯救你...
  14. 微商分销代理新零售商城源码
  15. Linu下安装ffmpeg
  16. AEJoy —— 表达式之归位(复位)模拟详解【JS】
  17. html黑洞效果,HTML5+Canvas的黑洞特效
  18. 【转】机器人领域的SCI期刊杂志和国际会议
  19. 傻傻分不清桃花,杏花,樱花,梨花,李花,海棠花?
  20. 区块链智能合约----Solidity状态修饰符view、pure

热门文章

  1. 通证网:一建的报考条件
  2. ai人工智能开发_人工智能使Web开发的面貌发生变化
  3. 【JSP课程设计】个人信息管理系统(代码保姆级)
  4. Micro SD 卡(TF卡) spi 模式实现方法
  5. iOS - 使用TestFlight进行App的Beta版本测试
  6. 彻底弄透Java处理GMT/UTC日期时间
  7. 4G PCIE网卡在英创ESM6800上的使用步骤
  8. 计算机硬件检测数据恢复理论知识,计算机硬件检测维与数据恢复赛项规程.doc...
  9. Html5原生video标签禁止全屏播放的实现
  10. C#长链接转短链接(调用新浪api)