2010-11-30 8 views
-1

「更新」できるMD5/SHAのプロパティとは何ですか?たとえば、 "test"のハッシュがある場合、 "case"を追加して "testcase"のハッシュを取得できます。それは、彼らが実際にインクリメンタルに計算されているということだけである...MD5/SHAの「更新」プロパティ?

答えて

1

EDIT:これは、私は以下の言及1ビットのパディングのためにも理論的には不可能です。事実上、md5("case", seed=md5("test")) == md5("test" + <1-bit> + "case")md5("test")を使用して、漸進的にmd5("test" + "case")を計算する方法はありません。

あなたは512ビットのチャンクを連結する場合、これは理論的には可能です。状態マシンの最初の実行は、 "ケース"を512ビットのチャンクにするのに使用されるパディングによって汚染されるため、 "ケース"を "テスト"に追加するためには機能しません。

さらに、パディングがゼロのちょうど束ではありません。メッセージには常に最初に1ビットが埋め込まれているので、 "case"と "case \ 0"は異なるハッシュを生成します。したがって、パディングの有無にかかわらず同じハッシュを持つ「ケース」に頼ることはできません。 MD5アルゴリズムは、次の手順を持っている

+0

これはランダムな塩を付加するために使用されるので、一貫している限り余分なビットは傷つきません。あなたの答えをありがとう! –

+0

@Stavros: "テストケース"を直接実際に計算するつもりがないなら、あなたが何をするかは本当に問題ではありません。あなたは 'md5(md5(" test ")+" case ")'を計算することさえできるので、シードパラメータを取るカスタムmd5を書く必要はありません。 –

2

を私は、このプロパティにビットを読みたいが、私の検索は何を上げていない - あなたは、データの最初のnバイト上で動作することによって、それらを計算し、(128 MD5の場合には、http://en.wikipedia.org/wiki/MD5#Algorithmを参照)、そのデータの次のnバイトに、等

+0

彼らが埋められていますか?これは、新しいものを得るためにあなたのハッシュにいつも数バイトを追加できるとは限りませんか?私は基本的に、XYのダイジェストを得るためにXのダイジェストにYを追加する方法が常にあるかどうか疑問に思っています。 –

+0

これは、512ビットチャンク化とパディングのために、 "test" + "case"に対しては機能しません。 –

+0

ありがとう、ありがとう。 –

1

1) pad input string to a multiple of 64 bytes 
2) split input string into blocks of 64 bytes 
3) initialise state (a 4-element array) 
4) for each block: state <= transform(state,block) 
5) encode state as string 

あなたが段階的に何かをハッシュしたい状況(例えば、大きなファイル)をサポートするには、以下のように、これはリファクタリングすることができます。

初期化:

1) initialise state 
2) leftover bytes <= "" 

更新:

1) append leftover bytes to start of input string 
2) split input string into blocks of 64 bytes 
3) for each complete block: state <= transform(state,block) 
4) leftover bytes <= contents of the incomplete block, if one exists 

ダイジェスト:

1) pad a copy of the leftover bytes 
2) split the padded leftover bytes into blocks of 64 bytes 
2) tmp_state <= state 
2) for each block: tmp_state <= transform(tmp_state,block) 
3) encode tmp_state as string 

私は実際にVBAで、このアプローチを実装しました - 正常に動作するようです。コードをどこにアップロードするべきですか?

関連する問題