架构师_程序员_码农网

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

搜索
查看: 699|回复: 3

[资料] 使用 RSA 算法前端加密后端(.NET)解密

[复制链接]
发表于 2024-9-6 08:44:03 | 显示全部楼层 |阅读模式
需求:项目中用户的原始密码要传给后端,因为后端拿着密码还要调用第三方接口。如果密码明文传输不太好,如果被抓包工具抓到,密码就泄露了。最终采用了 RSA 算法,前端使用公钥将密码加密,后端使用私钥解密。

前端使用 jsencrypt 包,地址:https://www.npmjs.com/package/jsencrypt

后端如果是 .NET 5 及以上使用内置的函数就能搞定,如果不是,请参数如下文章:

.NET/C# RSA 之 PEM 格式加密解密
https://www.itsvse.com/thread-10602-1-1.html

首先,使用 openssl 生成公钥和私钥,本文直接在 Linux 执行(Windows 系统请自行下载安装 openssl),命令如下:

QQ截图20240906083611.jpg

cat rsa_1024_priv.pem
-----BEGIN RSA PRIVATE KEY-----
MIICXAIBAAKBgQDTyd/KP2JuidA0JA+7i8FCzKCdn2Gq/ChfLpnBFcHb9vKgZb6n
aK2UXynpTbO6l5CVU4KG7w/hUJgxUQsSzNIsnPQuNpop/FO9doiV5l/94Hcuj17f
2AAEQGkWC8EvZBoMDr2JRVDBEji3l6mHXmTduCjH7VpuQyJRGHzWQu8HnwIDAQAB
AoGARat4Ifkd8U0Gn9BpGIIN7mKQR6nhoDTZNw6GZ903a5veDuPJhxrJVzDDAcuc
3znyxxy0qJzF9ZHkrvyBDwsv7AGyVfg6fwwLxvrsJS1MpwKLY3yqbPVk3hnaOECO
915XcbkVua+DGVjwtyX37CxPuSDaH2ut+kIQ3xci+BreSpkCQQD3FfgYELZgrHDk
JQaSiILCnFbld+NBuTm4CHPCN+XDZwzvC8sH4M9my7kznxAQosHbm+aGaOK1k4+k
zKgaiJzVAkEA223oSa7UMyMf/K/dEFmGjKBWQYP7gjLxcsxDHdwTpKHBEuZ32IT2
nuvYxsaOATqg8WABAJHWmT2Rj/joeAx8owJBANaLovLygAoNcbEIXV6bXj8xlVqG
8TO+a9narPk1pDI5psdijBb5I930g4nJUh+/02inRFHtfP2Bdbb5ZfY0LUkCQDxJ
iCamaBrcra8pSl1xm2wLqWc6seFlyby2rkIH80WqQ3fD5m2QqomjVt3WM7HWv91R
eTUE3KchqVqbEpPZKm0CQD7VMRAb1NNH+BNjuGxZB3AQSJvRXhpJ+w3ckSP6IX0L
N0OoHtvH5lvtm7hfB5nDUBYhqN3wj7wDNiK9Vrdyqow=
-----END RSA PRIVATE KEY-----
cat rsa_1024_pub.pem
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDTyd/KP2JuidA0JA+7i8FCzKCd
n2Gq/ChfLpnBFcHb9vKgZb6naK2UXynpTbO6l5CVU4KG7w/hUJgxUQsSzNIsnPQu
Npop/FO9doiV5l/94Hcuj17f2AAEQGkWC8EvZBoMDr2JRVDBEji3l6mHXmTduCjH
7VpuQyJRGHzWQu8HnwIDAQAB
-----END PUBLIC KEY-----

新建 index.html 网页,源码如下:

游客,如果您要查看本帖隐藏内容请回复


新建 .NET 8 控制台应用程序,源码如下:


使用浏览器打开 index.html 网页,测试加密后,使用 .NET 应用进行解密,如下图:

QQ截图20240906084206.jpg

备注:对于超长字符串加密和解密都会失败,需要分段加解密。具体没测试,可以参考:https://github.com/lsqswl/rsaencrypt

(完)




上一篇:Docker 查看镜像 latest 具体(对应)版本
下一篇:Jenkins(七)Linux 服务器搭建 Jenkins 2.462.1 版本
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
 楼主| 发表于 2024-10-14 15:51:48 | 显示全部楼层
生成 2048 长度的公钥和私钥

码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
 楼主| 发表于 2024-10-14 17:10:13 | 显示全部楼层
另外一个前端 RSA 加解密库“node-forge”,Forge 软件是JavaScript 中TLS协议的完全原生实现、一组加密实用程序和一组用于开发利用大量网络资源的 Web 应用程序的工具。

https://www.npmjs.com/package/node-forge

已在 Angular 中使用,使用 npm 安装如下:

前端代码如下:

后端 .NET 代码:

QQ截图20241014170350.jpg

码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
 楼主| 发表于 2024-10-16 08:23:58 | 显示全部楼层
RSA 加密最大数据大小
https://mbed-tls.readthedocs.io/en/latest/kb/cryptography/rsa-encryption-maximum-data-size/


在RSA加密算法中,要编码的最大块大小取决于所选择的密钥长度。一般来说,RSA密钥长度可以是1024位、2048位或者4096位。

对于1024位密钥,最大块大小为117字节。这意味着,当使用1024位密钥时,您可以加密的最大数据块为117字节。

对于2048位密钥,最大块大小为245字节。这意味着,当使用2048位密钥时,您可以加密的最大数据块为245字节。

对于4096位密钥,最大块大小为512字节。这意味着,当使用4096位密钥时,您可以加密的最大数据块为512字节。

码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

免责声明:
码农网所发布的一切软件、编程资料或者文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To:help@itsvse.com

QQ|手机版|小黑屋|架构师 ( 鲁ICP备14021824号-2 )|网站地图

GMT+8, 2024-12-15 04:29

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表