2011-01-26 15 views
1

我有一個45-50列和45-50行的數據表,我想創建一個校驗文本或md5,sha1,我不知道哪一個更好。如果還有一個,我將創建該文本並在數據庫中進行搜索。但文字長度必須在100-200字之間,我不知道我能否做到。那麼你對此有何看法,我該怎麼做?如何從DataTable對象創建校驗和?

謝謝。

+0

爲什麼這麼長的校驗? SHA1只有160位,結果是20個字符。哈希碰撞可以通過2^80(1,208,925,819,614,629,174,706,176)次嘗試中的蠻力方法來實現,並且在大約2^69次嘗試中通過有針對性的攻擊來實現。更多信息可以在Schneier的博客上找到:http://www.schneier.com/blog/archives/2005/02/cryptanalysis_o.html – 2011-01-26 15:07:01

+0

100-200個字符是最重要的。如果我能用20個字符處理它沒問題。但我不想從數據表對象創建校驗和,也想檢查行和字段。那麼我可以找到是否有另一個。 – mehmetserif 2011-01-26 15:19:40

回答

2

那麼明智的算法,要麼MD5SHA1(較新)將工作的校驗和。事情

夫婦雖然:

  • 爲什麼文本長度需要100-200字符之間?它仍然是一個散列,並且無論長度如何都表現出相同的信息。
  • 你打算怎麼做?
  • 你需要哪些幫助?
0

首先你應該做你的數據集

http://www.eggheadcafe.com/community/aspnet/2/7700/serializedeserialize-a-datatable.aspx

的二進制序列化計算SHA1:

/// <summary> 
/// Calculates SHA1 hash 
/// </summary> 
/// <param name="text">input string</param> 
/// <param name="enc">Character encoding</param> 
/// <returns>SHA1 hash</returns> 
public static string CalculateSHA1(string text, Encoding enc) 
{ 
    byte[] buffer = enc.GetBytes(text); 
    SHA1CryptoServiceProvider cryptoTransformSHA1 = 
    new SHA1CryptoServiceProvider(); 
    string hash = BitConverter.ToString(
     cryptoTransformSHA1.ComputeHash(buffer)).Replace("-", ""); 

    return hash; 
} 

或MD5:

http://www.spiration.co.uk/post/1203/MD5%20in%20C%23%20-%20works%20like%20php%20md5%28%29%20example

2

以下應做到:

// Serialize the table 
var serializer = new DataContractSerializer(typeof(DataTable)); 
var memoryStream = new MemoryStream(); 
serializer.WriteObject(memoryStream, table); 
byte[] serializedData = memoryStream.ToArray(); 

// Calculte the serialized data's hash value 
var SHA = new SHA1CryptoServiceProvider(); 
byte[] hash = SHA.ComputeHash(serializedData); 

// Convert the hash to a base 64 string 
string hashAsText = Convert.ToBase64String(hash); 

請注意,我們序列化整個表,不僅是其字段值與該表必須有一個名稱,以便允許系列化