1

45 ~ 50 列と 45 ~ 50 行のデータテーブルがあり、チェックサム テキストまたは md5、sha1 を作成したいのですが、どちらが優れているかわかりません。そのテキストを作成し、それがもう 1 つあればデータベースで検索します。ただし、テキストの長さは 100 ~ 200 文字にする必要があります。それができるかどうかはわかりません。それで、それについてあなたの意見は何ですか、どうすればそれを行うことができますか?

ありがとう。

4

4 に答える 4

5

次のようにする必要があります。

// 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);

フィールド値だけでなく、テーブル全体をシリアル化していることに注意してください。シリアル化を許可するには、テーブルに名前が必要です。

于 2011-01-26T09:20:01.387 に答える
2

アルゴリズム的には、MD5またはSHA1 (新しい) のいずれかがチェックサムに対して機能します。

ただし、いくつかのこと:

  • テキストの長さを 100 ~ 200 文字にする必要があるのはなぜですか? これは依然としてハッシュであり、長さに関係なく同じ情報を表します。
  • あなたは何をしようとしていますか?
  • どの部分のサポートが必要ですか?
于 2011-01-26T08:30:49.667 に答える
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

于 2011-01-26T08:37:09.973 に答える