RSA 数字签名异常
RSA 数字签名,传到虚拟主机上就不行呢。
百度了会发现别人说是目录权限的问题。。。
可是虚拟主机 无法更改那些目录的权限。。。我问了空间商。。说改不了。
这样改 怎么用 RSA 数字签名 ?????????
难道 C# RSA 签个名。。还必须在 C 盘写几个文件吗 ? 这个不就是算法的问题吗 ?
using (System.Security.Cryptography.RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(KeySize))
{
rsa.FromXmlString(privateKey);
byte[] data = rsa.SignData(encoding.GetBytes(input), new SHA1CryptoServiceProvider());
return byteToHex(data);
}
拒绝访问。
mscorlib
在 System.Security.Cryptography.CryptographicException.ThrowCryptogaphicException(Int32 hr)
在 System.Security.Cryptography.Utils._CreateCSP(CspParameters param, Boolean randomKeyContainer, SafeProvHandle& hProv)
在 System.Security.Cryptography.Utils.CreateProvHandle(CspParameters parameters, Boolean randomKeyContainer)
在 System.Security.Cryptography.RSACryptoServiceProvider.ImportParameters(RSAParameters parameters)
在 System.Security.Cryptography.RSA.FromXmlString(String xmlString)
在 AuthServer.Encrypt.RsaSignData(String input)
--------------------编程问答-------------------- 系统找不到指定的文件。
mscorlib
在 System.Security.Cryptography.Utils.CreateProvHandle(CspParameters parameters, Boolean randomKeyContainer)
在 System.Security.Cryptography.RSACryptoServiceProvider.ImportParameters(RSAParameters parameters)
在 System.Security.Cryptography.RSA.FromXmlString(String xmlString)
在 AuthServer.Encrypt.RsaSignData(String input)
百度了下。。。。
UseMachineKeyStore = true; 这个也不行 报ThrowCryptogaphicException异常。
不弄那个就在 System.Security.Cryptography.Utils.CreateProvHandle(CspParameters parameters, Boolean randomKeyContainer) 异常。
--------------------编程问答-------------------- public string EnCodes(string text)
{
RSACryptoServiceProvider rsa1 = new RSACryptoServiceProvider();
RSACryptoServiceProvider rsa2 = new RSACryptoServiceProvider();
string publicKey = rsa1.ToXmlString(true);
HttpContext.Current.Response.Cookies["PublicKey"].Value = publicKey;
rsa2.FromXmlString(publicKey);
byte[] ECode = rsa2.Encrypt(System.Text.Encoding.UTF8.GetBytes(text),false);
return Convert.ToBase64String(ECode);
}
//解密算法
public string DeCodes(string text)
{
RSACryptoServiceProvider rsa1 = new RSACryptoServiceProvider();
byte[] DCode = Convert.FromBase64String(text);
string publicKey = HttpContext.Current.Request.Cookies["PublicKey"].Value.ToString();
rsa1.FromXmlString(publicKey);
byte[] DCode2 = rsa1.Decrypt(DCode,false);
return System.Text.Encoding.UTF8.GetString(DCode2);
}
--------------------编程问答--------------------
大哥。。你的和我的代码差不多。。。没什么区别把。
除了一个 cookies 以外。 --------------------编程问答-------------------- 你的 encoding.GetBytes(input) 得到的是多少字节长? --------------------编程问答-------------------- 给你搜到一个文章,看看有没有用。 http://www.nod6.net/?p=45
我记得我好像是测试到110个字节,再长就不行了。所以我将byte[]放入 MemoryStream,然后以一个110字节的buffer分块取出,分块计算。 --------------------编程问答--------------------
错误是出在 RSA.FromXmlString(String xmlString) 这句。。 --------------------编程问答--------------------
你的虚拟机导入原来的系统的个人证书了? --------------------编程问答--------------------
虚拟机无法导入证书呀。。。我的 私匙 是 XML 格式的。 --------------------编程问答-------------------- 虚拟主机无法导入证书呀。。。 我的 私匙 是 XML 格式的。 --------------------编程问答-------------------- 你的问题解决了吗?我也遇到和你一样的问题 --------------------编程问答--------------------
这个问题是ASP.NET的问题。
搞个 RSA 非要在 C 盘写几个文件。。可以虚拟主机不让你写。。所以就出错呢。
唉。。我实在没办法呢。。。自己找代码。。自己写了个 RSA 算法。。好用的很。
补充:.NET技术 , C#