RSA解密提示“不正确的散列算法”

Lisen_1987 2009-08-23 01:08:22

/// <summary>
/// 对原始数据进行MD5加密
/// </summary>
/// <param name="key">待加密的注册码</param>
/// <returns>加密后的注册码</returns>
public static string GetMD5(string key)
{
HashAlgorithm algorithm = HashAlgorithm.Create("MD5");
byte[] bytes = Encoding.GetEncoding("GB2312").GetBytes(key);
byte[] inArray = algorithm.ComputeHash(bytes);
string strEncrypt = Convert.ToBase64String(inArray);
return strEncrypt;

}

/// <summary>
/// 使用私钥加密客户注册码[注册码+GUID码]
/// </summary>
/// <param name="key">客户注册码[注册码+GUID码]</param>
/// <param name="keyContainerName">密钥容器名称</param>
/// <param name="keyPath">私钥文件地址</param>
/// <returns>加密后的注册码</returns>
public static string EncryptKey(string key,string keyContainerName, string keyPath)
{
CspParameters cspParameter = new CspParameters();
StreamReader sr = new StreamReader(keyPath);
cspParameter.KeyContainerName = keyContainerName;
string strKey = sr.ReadLine();
string strEncrypt = string.Empty;
byte[] byteKeys = Convert.FromBase64String(GetMD5(key));

RSACryptoServiceProvider provider = new RSACryptoServiceProvider(cspParameter);
provider.FromXmlString(strKey);
RSAPKCS1SignatureFormatter formatter = new RSAPKCS1SignatureFormatter(provider);
formatter.SetHashAlgorithm("MD5");
byte[] byteEncrypt = formatter.CreateSignature(byteKeys);
strEncrypt = Convert.ToBase64String(byteEncrypt);
return strEncrypt;
}

/// <summary>
/// 使用公钥解密客户注册码验证
/// </summary>
/// <param name="publicKey">公钥</param>
/// <param name="key">授权文件信息</param>
/// <param name="computeInfo">电脑硬件信息</param>
public static bool Decrypt(string publicKey,string key,string computeInfo)
{
try
{
CspParameters cspParameter = new CspParameters();
cspParameter.KeyContainerName = "public";
RSACryptoServiceProvider provider = new RSACryptoServiceProvider(cspParameter);
provider.FromXmlString(publicKey);
RSAPKCS1SignatureDeformatter deformatter = new RSAPKCS1SignatureDeformatter(provider);
deformatter.SetHashAlgorithm("MD5");

//转换授权文件信息字符串
byte[] byteAuthorization = Convert.FromBase64String(key);
//转换当前电脑硬件信息
byte[] byteComputeInfo = Convert.FromBase64String(GetMD5(computeInfo));
if (deformatter.VerifySignature(byteAuthorization, byteComputeInfo))
{
return true;
}
else
{
return false;
}
}
catch (Exception ex)
{
WriteSystemLog(5, 3, "000000", ex.Message);
throw new Exception(ex.Message, ex);
}
}




执行以上代码之后提示“不正确的散列算法”,请问是代码哪里出了问题?急
...全文
108 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
lg2theside 2011-08-02
  • 打赏
  • 举报
回复
路过。。。。。。。。。。。。
Lisen_1987 2009-08-24
  • 打赏
  • 举报
回复
天啊,没人知道吗?
Lisen_1987 2009-08-24
  • 打赏
  • 举报
回复
问题出在解密那里,到了
if (deformatter.VerifySignature(byteAuthorization, byteComputeInfo))
这里就出现异常,然后我把两个参数调换了一下位置之后就没出错了,但是结果总是false,不知道是哪里的数据出错了,我一步步地调,但是就是找不出来,快崩溃了~~有哪位大虾看出啥问题,帮忙指点一下迷津~~
大狼尾巴 2009-08-23
  • 打赏
  • 举报
回复
不知道。。。关注一下。。。。

62,266

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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