RSA前台js加密,后台C#解密
一、需求:
为了安全,项目中前台登陆用的密码需要加密传到后台,后台c#解密登陆密码。
二、解决方案
采用非对称加密算法RSA来达到目的,前台登陆页面一加载便发送一次ajax请求获取后台产生的公钥,用于前台加密,用户点击登陆时出发加密过程并提交加密的数据到后台,后台C#语言采用已封装好的RSA算法工具进行密码解密。
以下为c#RSA算法加密代码:
private static RSAParameters rsap = new RSAParameters() {
Modulus = Convert.FromBase64String(@"sB6+4rtO2sYeIZ8kJGGM647PIm+dJkwvSPNWcQ01D2cwPjIGV2c41h39FjYuzgAKzrIFjSvuBpG4y/PFEHuN+
LackSt6MU7qcbs7lzub8V97XZ5fddPaq/GWXo9mrIMMFDMW7z88WrukLGTvwkqySPBemc22rjua1uTR3azae7U="),
Exponent = Convert.FromBase64String(@"AQAB"),
P = Convert.FromBase64String(@"8yUCFVCufr3z2LDAwHaUO4r3na3WZqhAb3J7aXv/rj9UEXQWwZoG8IbUzV2fUhMXjnFXyrRSqywWdpxeE6oLWw=="),
Q = Convert.FromBase64String(@"uW6NlpzkBl4Do7K4RUDCsZ9uiVqnU0cbm7JVuygWJts+pu1ho5s0auUekQy5al6p4xifjWIcCsLvPxsLuWISLw=="),
DP = Convert.FromBase64String(@"rDsf0ad4I3E8hNcXgn28nLzgj8Hu6ILwOcGXZ+4c+/oB++cGo5cOqVxo6xwRWhsKCa2B6aV4FaZCNzymazl9lw=="),
DQ = Convert.FromBase64String(@"dVVT+FKMIs9IZEPJP+DrkTM94WHgcNyUxp9Aii2iXrHqYfvhBYJG18Dk54lypbECtLU2+GJ1NgYFFxxI/ePldw=="),
InverseQ = Convert.FromBase64String(@"z8qRY0+yyfZFNFPMtlTumpYyCXUbK+GpWnFp2hOyTABya/h7g4DCRE6iO9UZKgW4paB5K75mJwdBgVib5NgFiQ=="),
D = Convert.FromBase64String(@"W1ZWoLeLWaJNlho2YDfHIZLakX1Y/reb/jVUqySyU96sAlVnPITn0QOUcaR/+Y3EDRX+EwypUPbZ48v0c2vgYDHwIb
rIbsEyN+vHoUNJ319R5kUZ8Wlfw/w6/6BSclqbWQ8OdSj1cKwx/EEJh4iipqJ8HBTsmoT0anQHP/jdybE=")
};
private static string RSAEncrypt(string publicKey, string content) {
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(1024);// RSACryptoServiceProvider();
rsa.ImportParameters(rsap);//导入公钥
byte[] result = rsa.Encrypt(Encoding.UTF8.GetBytes(content), false);
return Convert.ToBase64String(result);
}
private static string RSADecrypt(string privateKey, string content) {
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(1024);
rsa.ImportParameters(rsap);
var result = rsa.Decrypt(Convert.FromBase64String(content), false);
return Encoding.UTF8.GetString(result);
}
后台传到前台的公钥信息为:
rsap.Exponent.HexEncode();
rsap.Modulus.HexEncode();
HexEncode()为字节数组类型静态扩展,只为每个字节转化为对应的16进制,代码如下:
public static string ToHexEncode(this byte[] bytes) {
return BitConverter.ToString(bytes).Replace("-", string.Empty);
}
采用上面静态对象rsap,经HexEncode传到前台的公钥信息为:
1.010001
2.B01EBEE2BB4EDAC61E219F2424618CEB8ECF226F9D264C2F48F356710D350F67303E3206576738D61DFD16362ECE000ACEB2058D2BEE0691B8CBF3C5107B
8DF8B69C912B7A314EEA71BB3B973B9BF15F7B5D9E5F75D3DAABF1965E8F66AC830C143316EF3F3C5ABBA42C64EFC24AB248F05E99CDB6AE3B9AD6E4D1DD
ACDA7BB5
前台js加密,从网上搜刮了RSA的js实现,页面需依次加入三个js文件:BigInt.js,Barrett.js,RSA.js,后面附上这三个js库。比如加密zjt,js代码如下:
setMaxDigits(130);
var key = new RSAKeyPair('010001', "", 'B01EBEE2BB4EDAC61E219F2424618CEB8ECF226F9D264C2F48F356710D350F67303E3206576738D61DFD163
62ECE000ACEB2058D2BEE0691B8CBF3C5107B8DF8B69C912B7A314EEA71BB3B973B9BF15F7B5D9E5F75D3DAABF1965E8F66AC830C143316EF3F3C5ABBA42C64
EFC24AB248F05E99CDB6AE3B9AD6E4D1DDACDA7BB5');
var res = encryptedString(key,'zjt')
得到res为加密结果,用于会传到后台,res结果为:
9839c4f8cf40e5cd30be61a1e215c571424fca76108aacecc5ca45f9cdb6c207f4477eff32d41799babe915fd8806fce18ad38c4732d96008c506484940da7
a9b47cb7bc40f8bb70e079f8ae91e2b46d8d5d9bd1fa6ed637176d67a2a437ac801cca25f7e7c33b482d36f980da52982d65e6e388f2b2c47c7fcdfa797802
f2a5
后台接收次加密的串,先转成字节,这里又用到了一个静态扩展HexDecode,转成字节,采用RSACryptoServiceProvider对象导入私钥进行解码:
public static byte[] HexDecode(this string me)
{
string s = me.Length % 2 == 1 ? "0" + me : me;
byte[] data = new byte[s.Length / 2];
for (int i = 0; i < data.Length; i++)
{
data[i] = byte.Parse(s.Substring(i + i, 2), NumberStyles.HexNumber);
}
return data;
}
public static string GetString(this byte[] content, Encoding encoding = null)
{
encoding = encoding ?? Encoding.ASCII;
return encoding.GetString(content);
}
解密过程如下:
var pass = "9839c4f8cf40e5cd30be61a1e215c571424fca76108aacecc5ca45f9cdb6c207f4477eff32d41799babe915fd8806fce18ad38c4732d96008c50648494
0da7a9b47cb7bc40f8bb70e079f8ae91e2b46d8d5d9bd1fa6ed637176d67a2a437ac801cca25f7e7c33b482d36f980da52982d65e6e388f2b2c47c7fcdfa797802
f2a5";
byte[] data = pass.HexDecode();
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(1024);
rsa.ImportParameters(rsap);
var res = rsa.Decrypt(data, false);
Console.WriteLine(res.GetString());//用到上面静态扩展,解密后结果为zjt
RSA前台js加密,后台C#解密的更多相关文章
- 前端 js加密 后台java 解密 RSA
前端代码 : $.ajax({ type:"GET", url:"http://localhost:8084/getPulbicKey", dataType:& ...
- RSA客户端js加密服务器C#解密(含源码)
国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...
- 前台js与后台方法互调
一:后台调用前台js的方法 ClientScript.RegisterStartupScript(ClientScript.GetType(), "myscript", " ...
- asp.net 调用前台JS调用后台,后台掉前台JS
C#前台js调用后台代码前台js<script type="text/javascript" language="javascript"> func ...
- ASP.NET前台JS与后台CS函数如何互相调用
摘要: 在实际的Web开发中,我们可能会常常遇到后台调用前台JS代码或者前台JS调用后台代码的情况.今天就把比较实用的前后台相互调用的方法总结出来和大家分享. 在实际的Web开发中,我们可能会常常遇到 ...
- [转]Asp.Net调用前台js调用后台代码分享
1.C#前台js调用后台代码 前台js <script type="text/javascript" language="javascript"> ...
- asp.net调用前台js调用后台代码分享
asp.net调用前台js调用后台代码分享 C#前台js调用后台代码前台js<script type="text/javascript" language="jav ...
- AES加密解密——AES在JavaWeb项目中前台JS加密,后台Java解密的使用
一:前言 在软件开发中,经常要对数据进行传输,数据在传输的过程中可能被拦截,被监听,所以在传输数据的时候使用数据的原始内容进行传输的话,安全隐患是非常大的.因此就要对需要传输的数据进行在客户端进行加密 ...
- RSA前端JS加密,后端JAVA解密实现
用RSA非对称加密方式实现.后台生成rsa密钥对,然后在页面设置rsa公钥,提交时用公钥加密密码,生成的密文传到后台,后台再用私钥解密,获取密码明文.这样客户端只需要知道rsa加密方式和公钥,前台不知 ...
随机推荐
- ffmpeg-2.3.3 configure for android
#! /bin/shNDK=/usr/local/android-ndk-r10PREBUILT=${NDK}/toolchains/arm-linux-androideabi-4.9/prebuil ...
- 01day2
小明搬家 模拟 [问题描述] 小明要搬家了,大家都来帮忙. 小明现在住在第N楼,总共K个人要把X个大箱子搬上N楼. 最开始X个箱子都在1楼,但是经过一段混乱的搬运已经乱掉了.最后大家发现这样混乱地搬运 ...
- ECshop 二次开发模板教程4
今天我们学习一下如何在首页调取某个分类的商品:注意了,这里的修改有一些麻烦了哦:首先你需要下载一套新的模板,比如blueksy 上传到模板目录 /themes/ 也就是 /themes/bluesky ...
- tools/adb: No such file or directory
运行adb出现这种错误: bash: ./adb: No such file or directory 但adb确实存在.那说明你用的是64位的Linux,没装32位运行时库,安装 $ sudo ...
- hdu 2087-剪花布条(KMP)
题意: 求文本串最多可以分成几个模式串. 分析: KMP #include <map> #include <set> #include <list> #includ ...
- windows各种程序中文显示乱码又找不到原因时
我电脑上的各种程序,如xshell,Navicat for MySQL都不正常显示中文,该软件的编码,utf-8,gbk,gb2312来回切换好几回,没一次正常,最好解决办法如下 进入控制 ...
- DbHelper第三版, 数据库通吃
using System;using System.Collections;using System.Data;using System.Data.Common;using System.Config ...
- 线性模型(3):Logistic Regression
此笔记源于台湾大学林轩田老师<机器学习基石><机器学习技法> (一)Logistic Regression 原理 对于分类问题,假设我们想得到的结果不是(x属于某一类)这种形式 ...
- bzoj 2438 [中山市选2011]杀人游戏(SCC+概率)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2438 [题意] N个人中有一个杀手,每次询问一个人可能被杀或被告知其认识的人中谁是杀手 ...
- windows7+eclipse-jee-luna+hadoop2.6运行环境及eclipse plugin插件编译
一.hadoop集群环境配置 参见:<Hadoop2.6集群环境搭建(HDFS HA+YARN)原来4G内存也能任性一次.> Win7环境: 登录用户名:hadoop , 与Hadoop ...