RSA js加密 C#解密 出现错误"不正确的数据"

yxy10072510329 2013-10-17 10:23:38
最近想把RSA加密方法应用的项目,于是去网上查了Rsa加密的使用方法,找到了Javascript 库:
http://www.ohdave.com/rsa/
结合C#自用的RSACryptoServiceProvider实现逻辑如下:
1.RSA 对象:
 internal RSACryptoServiceProvider Rsa
{
get
{

if (HttpContext.Cache["Rsa"] != null)
{
RSACryptoServiceProvider encryptKeys = (RSACryptoServiceProvider)HttpContext.Cache["Rsa"];
return encryptKeys;
}
else
{
return new RSACryptoServiceProvider();
}
}
set
{
HttpContext.Cache.Remove("Rsa");
HttpContext.Cache.Insert("Rsa", value);
}
}

2.对象初始化和测试加密解密:
 public static RSACryptoServiceProvider GetRsa()
{
RSACryptoServiceProvider Rsa = new RSACryptoServiceProvider(1024);
return Rsa;
}

 public ActionResult SignUp()
{
this.Rsa = Security.GetRsa();
RSAParameters param= this.Rsa.ExportParameters(true);
//传公钥
TempData["exponent"] = Util.BytesToHexString(param.Exponent);
TempData["key"] = Util.BytesToHexString(param.Modulus);

string teststr = System.Text.Encoding.Default.GetString(
Rsa.Decrypt(
Rsa.Encrypt(System.Text.Encoding.Default.GetBytes(Security.GetMd5Hash("123")),false)
, false)
);

teststr = Util.BytesToHexString(Rsa.Encrypt(System.Text.Encoding.Default.GetBytes(Security.GetMd5Hash("123")), false));
UserInfo user = new UserInfo();
user.Birthday = DateTime.Now.Date;
return View(user);
}

3.JS代码:
$(function () {
$("#submitbutton").click(function() {
if (document.getElementById("Pwd").value != document.getElementById("Pwd2").value || document.getElementById("Pwd").value.length < 3 || document.getElementById("Pwd").value.length > 16) {
document.getElementById("error").innerHTML = "请输入3到16位的密码(字母,数字,特殊字符),请保持两次输入一致!";
}
else {
//Md5后传输
//var hash = hex_md5(document.getElementById("Pwd").value);
var hash = document.getElementById("Pwd").value;

//RSA Encrypt
var exponent = document.getElementById("exponent").innerHTML;
var rsa_n = document.getElementById("key").innerHTML;
setMaxDigits(131);
var key = new RSAKeyPair(exponent, "", rsa_n);
hash = encryptedString(key, "111");//base64encode(strUnicode2Ansi(hash))+"");

//反绑定
document.getElementById("Pwd").value = hash;
document.getElementById("Pwd2").value = hash;

document.getElementById("error").innerHTML = "";
document.getElementById("submit").click();
}
});
});

4.C#解密代码

[HttpPost]
public ActionResult SignUp(UserInfo user)
{
user.UserId = user.UserId.ToLower(); //邮箱不区分大小写
user.UserGUID = Guid.NewGuid();
user.CreatedDate = DateTime.Now;
user.IsEnabled = false;

user.Pwd = Convert.ToBase64String(Rsa.Decrypt(Util.HexStringToBytes(user.Pwd), false));//这里出现“不正确的数据。”
...全文
704 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
newtee 2016-01-15
  • 打赏
  • 举报
回复
Justin-Liu 2016-01-15
  • 打赏
  • 举报
回复
编码格式别用default,指定一个
猫咪神 2016-01-14
  • 打赏
  • 举报
回复
同样出现了此问题
skywshing 2015-07-30
  • 打赏
  • 举报
回复
怎么解决的这个问题?请楼主指教一下

111,097

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧