Js参数RSA加密传输之jsencrypt.js的使用
注意几点:
1、参数传递的+号处理,在传输时会把+变成空格,不处理后端就报错了。
1、前端代码
Login $(function(){ varencrypt=newJSEncrypt(); encrypt.setPublicKey($("#tra").val()); vardata=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); } }); }); }); MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCa4KHNwDX44gGmmIAtRu4gjVYt GWZzcm4t+1wjUD4dn7fMLPvuK7ai4UrfDeEJE1RPwudJw+lJ6crql8wSIg7/DbTl G3ihsCT6dT9H5B9OoeR7K9VWUesaW/iyVL6HXiYOANabW14pvJATDmdq91Tfgp6P SQyvdfiRdV4r07crpQIDAQAB
注意+好的处理
2、后端代码
publicclassIndexController:Controller
{publicActionResultLogin()
{
returnView();
}
[HttpPost]
publicActionResultLogin(stringpwd)
{
//密钥格式要生成pkcs#1格式的而不是pkcs#8格式的
stringprivateKey=@"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
{
RSACryptoServiceProviderrsaCryptoServiceProvider=CreateRsaProviderFromPrivateKey(privateKey);
//把+号,再替换回来
byte[]res=rsaCryptoServiceProvider.Decrypt(Convert.FromBase64String(pwd.Replace("%2B","+")),false);
returnContent(Encoding.UTF8.GetString(res));
}
catch(Exceptionexception)
{
}
returnContent("");
}
privateRSACryptoServiceProviderCreateRsaProviderFromPrivateKey(stringprivateKey)
{
varprivateKeyBits=System.Convert.FromBase64String(privateKey);
varRSA=newRSACryptoServiceProvider();
varRSAparams=newRSAParameters();
using(BinaryReaderbinr=newBinaryReader(newMemoryStream(privateKeyBits)))
{
bytebt=0;
ushorttwobytes=0;
twobytes=binr.ReadUInt16();
if(twobytes==0x8130)
binr.ReadByte();
elseif(twobytes==0x8230)
binr.ReadInt16();
else
thrownewException("Unexpectedvaluereadbinr.ReadUInt16()");
twobytes=binr.ReadUInt16();
if(twobytes!=0x0102)
thrownewException("Unexpectedversion");
bt=binr.ReadByte();
if(bt!=0x00)
thrownewException("Unexpectedvaluereadbinr.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);
returnRSA;
}
privateintGetIntegerSize(BinaryReaderbinr)
{
bytebt=0;
bytelowbyte=0x00;
bytehighbyte=0x00;
intcount=0;
bt=binr.ReadByte();
if(bt!=0x02)
return0;
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);
returncount;
}
}
总结
以上所述是小编给大家介绍的Js参数RSA加密传输之jsencrypt.js的使用,希望对大家有所帮助!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。