如何“签署”以后要识别的大字符串?

时间:2015-06-08 20:47:30

标签: c# .net-3.5

我建立了一个系统,让两个系统相互通信。 系统A在数据库中放入消息M,系统B处理消息并在数据库中放入消息M'。 系统A“订阅”到M'。 要“签名”此消息(一个大的xml文件)我使用哈希码,所以我可以理解消息M'= M. 这适用于大多数消息但是其他消息不能正常工作(我在记事本中打开了两个文件M和M'并且它们是相同的。)

可能是系统B格式(当然没有更改内容)消息,导致返回的方式不同的哈希码。

听起来合理吗? 如何以更健壮的方式签署消息?

到目前为止,我正在使用C#,.NET3.5来实现这一目标,而且我无法改变技术。

我正在以这种方式从fs中读取M(并生成哈希码):

_currentHashCode = File.ReadAllText(file.FullName).GetHashCode();

在B中的所有处理之后,B已经通知我,它将M'发送给对象:

object messageObj;

....

int hash = messageObj.ToString().GetHashCode();

由于

1 个答案:

答案 0 :(得分:2)

GetHashCode()不会返回加密哈希值。您需要使用System.Security.Cryptography空间中的一种机制以您希望的方式创建哈希。

From MSDN:

  

哈希代码用于在基于哈希表的集合中进行有效插入和查找。哈希码不是   永久价值。出于这个原因:

     
      
  • 不要序列化哈希码值或将它们存储在数据库中。
  •   
  • 请勿使用哈希码作为密钥从密钥集合中检索对象。
  •   
  • 不要跨应用程序域或进程发送哈希码。在某些情况下,可以在每个进程上计算哈希码   每个应用程序域的基础。
  •   
  • 如果您需要加密强大,请不要使用哈希码而不是加密哈希函数返回的值   哈希值。对于加密哈希,请使用从中派生的类   System.Security.Cryptography.HashAlgorithm或   System.Security.Cryptography.KeyedHashAlgorithm类。
  •   
  • 不测试哈希码的相等性以确定两个对象是否相等。 (不等的对象可以具有相同的哈希码。)To   测试相等性,调用ReferenceEquals或Equals方法。
  •