本文实例讲述了jQuery+C#实现参数RSA加密传输功能。分享给大家供大家参考,具体如下:

注意:
参数传递的+号处理,在传输时会把+变成空格,不处理后端就报错了。
1、前端代码
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Login</title>
<script src="jquery-1.10.2.min.js"></script>
<script src="jsencrypt.min.js"></script>
<script type="text/javascript">
$(function () {
var encrypt = new JSEncrypt();
encrypt.setPublicKey($("#tra").val());
var data = encrypt.encrypt("123456789");
alert(data);
$("#btn").click(function () {
$.ajax({
url: '@Url.Action("Login")',
data: "pwd=" + encodeURI(data).replace(/\+/g, '%2B'), //+号的处理:因为数据在网络上传输时,非字母数字字符都将被替换成百分号(%)后跟两位十六进制数,而base64编码在传输到后端的时候,+会变成空格,因此先替换掉。后端再替换回来
type: 'post',
success: function (msg) {
alert(msg);
}
});
});
});
</script>
</head>
<body>
<div>
<input type="button" id="btn" value="点我" />
<textarea id="tra" rows="15" cols="65">
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCa4KHNwDX44gGmmIAtRu4gjVYt
GWZzcm4t+1wjUD4dn7fMLPvuK7ai4UrfDeEJE1RPwudJw+lJ6crql8wSIg7/DbTl
G3ihsCT6dT9H5B9OoeR7K9VWUesaW/iyVL6HXiYOANabW14pvJATDmdq91Tfgp6P
SQyvdfiRdV4r07crpQIDAQAB
</textarea>
<hr/>
注意+号的处理
</div>
</body>
</html>
2、后端代码
public class IndexController : Controller
{
public ActionResult Login()
{
return View();
}
[HttpPost]
public ActionResult Login(string pwd)
{
//密钥格式要生成pkcs#1格式的 而不是pkcs#8格式的
string privateKey = @"MIICWwIBAAKBgQCa4KHNwDX44gGmmIAtRu4gjVYtGWZzcm4t+1wjUD4dn7fMLPvuK7ai4UrfDeEJE1RPwudJw+lJ6crql8wSIg7/DbTlG3ihsCT6dT9H5B9OoeR7K9VW
UesaW/iyVL6HXiYOANabW14pvJATDmdq91Tfgp6PSQyvdfiRdV4r07crpQIDAQAB
AoGABb+3gdb+qeG0b1CogVsT/7//UOaTzPk/FGneKQQTf4SsN+H7lVhTYTG9ARFC
JyoWg8IXqmn2ljhywHPTWWD2RCZIn2sYT1sVkGb70EgHGQLBraFHElmw+DsVJ+nD
fBCfMrJ1TYXlwigjRkaueaoGgG8LdR8XD+Xs5LersPLjZgECQQCguSB7C4wF6oSw
EDmwNF8ffT5cQc1U2OIq6NBG8rafrjb7LsjhOd03pmY7i4LbW3Vvq4AhQpJEdF1C
vd+Sk/BBAkEA9rBhqnyumV09zFEomSX3zZu+bdhTzM4bJDfEa95swp1gANCVvF/t
DCnlBf51EhCWdeGSpARPUkQnXrYfFUDiZQJAAZEshuaa6+fYeVr/JP+tucHf3Mhr
dxtSQTbZ6QcuzqnFMXfIT6HfzU4bCxOWKAthPsB+VFSw1mgIDMGLL4OvwQJAJlVy
V9PYLezXVZCnBmVoBINXLCqZmxHMFey0kS6XKAbcjEPdgNBHPcSk2jGYb540Q00y
RFqHGPmORKF4Yw0aIQJAd5JRtD3z2MgP/vPoKHJNHqY8bboVcmwqVAm6xCZoTCZz
jNV1Cnsdf4wBV3LCDzYBy+xR4qYNUy5CFXN+8WzzAA==";
try
{
RSACryptoServiceProvider rsaCryptoServiceProvider = CreateRsaProviderFromPrivateKey(privateKey);
//把+号,再替换回来
byte[] res = rsaCryptoServiceProvider.Decrypt(Convert.FromBase64String(pwd.Replace("%2B","+")), false);
return Content(Encoding.UTF8.GetString(res));
}
catch (Exception exception)
{
}
return Content("");
}
private RSACryptoServiceProvider CreateRsaProviderFromPrivateKey(string privateKey)
{
var privateKeyBits = System.Convert.FromBase64String(privateKey);
var RSA = new RSACryptoServiceProvider();
var RSAparams = new RSAParameters();
using (BinaryReader binr = new BinaryReader(new MemoryStream(privateKeyBits)))
{
byte bt = 0;
ushort twobytes = 0;
twobytes = binr.ReadUInt16();
if (twobytes == 0x8130)
binr.ReadByte();
else if (twobytes == 0x8230)
binr.ReadInt16();
else
throw new Exception("Unexpected value read binr.ReadUInt16()");
twobytes = binr.ReadUInt16();
if (twobytes != 0x0102)
throw new Exception("Unexpected version");
bt = binr.ReadByte();
if (bt != 0x00)
throw new Exception("Unexpected value read binr.ReadByte()");
RSAparams.Modulus = binr.ReadBytes(GetIntegerSize(binr));
RSAparams.Exponent = binr.ReadBytes(GetIntegerSize(binr));
RSAparams.D = binr.ReadBytes(GetIntegerSize(binr));
RSAparams.P = binr.ReadBytes(GetIntegerSize(binr));
RSAparams.Q = binr.ReadBytes(GetIntegerSize(binr));
RSAparams.DP = binr.ReadBytes(GetIntegerSize(binr));
RSAparams.DQ = binr.ReadBytes(GetIntegerSize(binr));
RSAparams.InverseQ = binr.ReadBytes(GetIntegerSize(binr));
}
RSA.ImportParameters(RSAparams);
return RSA;
}
private int GetIntegerSize(BinaryReader binr)
{
byte bt = 0;
byte lowbyte = 0x00;
byte highbyte = 0x00;
int count = 0;
bt = binr.ReadByte();
if (bt != 0x02)
return 0;
bt = binr.ReadByte();
if (bt == 0x81)
count = binr.ReadByte();
else
if (bt == 0x82)
{
highbyte = binr.ReadByte();
lowbyte = binr.ReadByte();
byte[] modint = { lowbyte, highbyte, 0x00, 0x00 };
count = BitConverter.ToInt32(modint, 0);
}
else
{
count = bt;
}
while (binr.ReadByte() == 0x00)
{
count -= 1;
}
binr.BaseStream.Seek(-1, SeekOrigin.Current);
return count;
}
}
附:jsencrypt.min.js点击此处本站下载。
PS:关于加密解密感兴趣的朋友还可以参考本站在线工具:
MD5在线加密工具:
http://tools./password/CreateMD5Password
迅雷、快车、旋风URL加密/解密工具:
http://tools./password/urlrethunder
在线散列/哈希算法加密工具:
http://tools./password/hash_encrypt
在线MD5/hash/SHA-1/SHA-2/SHA-256/SHA-512/SHA-3/RIPEMD-160加密工具:
http://tools./password/hash_md5_sha
在线sha1/sha224/sha256/sha384/sha512加密工具:
http://tools./password/sha_encode
更多关于jQuery相关内容感兴趣的读者可查看本站专题:《jQuery常用插件及用法总结》、《jQuery扩展技巧总结》、《jQuery切换特效与技巧总结》、《jQuery遍历算法与技巧总结》、《jQuery常见经典特效汇总》、《jQuery动画与特效用法总结》及《jquery选择器用法总结》
希望本文所述对大家jQuery程序设计有所帮助。
# jQuery
# C#
# 参数
# RSA
# 加密
# 传输
# Js参数RSA加密传输之jsencrypt.js的使用
# vue使用JSEncrypt对密码本地存储时加解密的实现
# Java实现前端jsencrypt.js加密后端解密的示例代码
# 前端加密cryptojs与JSEncrypt使实例详解
# Vue中使用jsencrypt进行RSA非对称加密的操作方法
# Vue使用JSEncrypt实现rsa加密及挂载方法
# 在Vue项目中使用jsencrypt.js对数据进行加密传输的方法
# 前端利用jsencrypt.js进行RSA加密示例详解
# 后端
# 加密工具
# 感兴趣
# 相关内容
# 还可以
# 遍历
# 两位
# 错了
# 给大家
# 将被
# 更多关于
# 所述
# 程序设计
# 而不是
# 替换成
# 加密解密
# 选择器
# 讲述了
# cols
# id
相关文章:
如何通过商城自助建站源码实现零基础高效建站?
企业宣传片制作网站有哪些,传媒公司怎么找企业宣传片项目?
南宁网站建设制作定制,南宁网站建设可以定制吗?
python的本地网站制作,如何创建本地站点?
图册素材网站设计制作软件,图册的导出方式有几种?
制作网站的过程怎么写,用凡科建站如何制作自己的网站?
建站主机是否属于云主机类型?
创业网站制作流程,创业网站可靠吗?
香港代理服务器配置指南:高匿IP选择、跨境加速与SEO优化技巧
常州自助建站费用包含哪些项目?
建站之星如何快速生成多端适配网站?
广州顶尖建站服务:企业官网建设与SEO优化一体化方案
如何高效完成独享虚拟主机建站?
大型企业网站制作流程,做网站需要注册公司吗?
如何批量查询域名的建站时间记录?
开源网站制作软件,开源网站什么意思?
建站之星logo尺寸如何设置最合适?
微课制作网站有哪些,微课网怎么进?
如何实现建站之星域名转发设置?
如何在云指建站中生成FTP站点?
标准网站视频模板制作软件,现在有哪个网站的视频编辑素材最齐全的,背景音乐、音效等?
高防网站服务器:DDoS防御与BGP线路的AI智能防护方案
微信小程序制作网站有哪些,微信小程序需要做网站吗?
建站之星好吗?新手能否轻松上手建站?
名字制作网站免费,所有小说网站的名字?
如何做网站制作流程,*游戏网站怎么搭建?
专业制作网站的公司哪家好,建立一个公司网站的费用.有哪些部分,分别要多少钱?
文字头像制作网站推荐软件,醒图能自动配文字吗?
网站制作外包价格怎么算,招聘网站上写的“外包”是什么意思?
制作销售网站教学视频,销售网站有哪些?
建站VPS配置与SEO优化指南:关键词排名提升策略
PHP 500报错的快速解决方法
如何彻底卸载建站之星软件?
建站之星2.7模板:企业网站建设与h5定制设计专题
高性能网站服务器部署指南:稳定运行与安全配置优化方案
Avalonia如何实现跨窗口通信 Avalonia窗口间数据传递
已有域名如何免费搭建网站?
上海网站制作网页,上海本地的生活网站有哪些?最好包括生活的各个方面的?
如何在建站之星绑定自定义域名?
可靠的网站设计制作软件,做网站设计需要什么样的电脑配置?
建站主机与服务器功能差异如何区分?
定制建站是什么?如何实现个性化需求?
如何在七牛云存储上搭建网站并设置自定义域名?
c++23 std::expected怎么用 c++优雅处理函数错误返回【详解】
安徽网站建设与外贸建站服务专业定制方案
c# await 一个已经完成的Task会发生什么
网站好制作吗知乎,网站开发好学吗?有什么技巧?
再谈Python中的字符串与字符编码(推荐)
如何设置并定期更换建站之星安全管理员密码?
C++用Dijkstra(迪杰斯特拉)算法求最短路径
*请认真填写需求信息,我们会在24小时内与您取得联系。