2011-01-04 15 views
1

私は正確にこれを尋ねる方法はわかりませんが、ここには5+nのキーが含まれている可能性のある構造が与えられています(私のシステムには必須の5つのキーがありますキーは任意である) - 5同一キーを持つ6キーハッシュが5キー構造のスーパーセットであり、追加情報を提供することを確認できるハッシングメカニズムが必要です。具体的には、リクエスト毎にワイヤを介して完全な構造体を送ることを排除する制約があるため、ハッシングメカニズム。 、追加のキーを追加する場合"ベースの"データチェックサムの計算。 (SHA1/2など)

SHA-512 
04fe500f2b3e779aba9ecb171224a04d35cc8453eb1521c7e31fd48b56b1cce9 
b1e8af775e177e110982bfb16a6ca8652d7d9812ab8a8c316015dc9d6b3b54f7 

SHA-256 
4833be7086726e7ffd82db206f94f0a4f9fdf7fba00692f626157afed4587c74 

:これが見えるように出てくる

--- 
    name: codebeaker 
    occupation: developer 

SHA-512でハッシュされ、そして -256

は明確化のため、ここでは(サンプルが2+nキーが必要です)いくつかの情報です(下の例)私は、拡張データセットが最初のスーパーセットであると推測できるようにしたいと考えています。

--- 
    name: codebeaker 
    occupation: developer 
    telephone: 49 (0) 123 45 67 

しかし、当然、MD5SHA-nと私はに見てきた他のハッシング関数の中で、これを行う方法はありません、例:

SHA-512 
2fe2c1f01e39506010ea104581b737f95db6b6f71b1497788afc80a4abe26ab0 
fc4913054278af69a89c152406579b7b00c3d4eb881982393a1ace83aeb7b6a2 

SHA-256 
77c2942e9095e55e13c548e5ef1f874396bfb64f7653e4794d6d91d0d3a168e2 

(明らかに)何の類似点が存在しません。..

私たちの使用例では、このデータは構造体としてフォーマットされ、サードパーティによってシステムに供給されます。データの処理は1回の操作で2〜3秒という非常に高価ですが、前回の実行結果がわかっていれば、その時間の約50%を得ることができます。ベイジアンとLevensteinのテキスト差分アルゴリズムは頭字語であるキー/値のペアや、完全に無関係なときに類似したように見えるその他のテキストがよく見られるため、ここでは適切です。

私が必要とするのは、同じデータを持つ同じキーがすべて含まれている場合、BAのスーパーセットであると判断できるように、チェックサムデータ(ここで私の応答をバイアスしている可能性があります)です。しかし、多くの場合、キー/バリューエントリにはデータがたくさんあり、私たちはすでに完全なコピーを見ただけで、高価で無駄なものになると判断するたびに、毎回それを送信しています。

+0

「キー」は既知であり、修正されていますか?そうでない場合は、あなたの(名前、職業、電話)を3倍にすると、比較(名前、職業)、(名前、電話)、(職業、電話)の3つのスーパーセットを作成する必要があります。 。提供されるキーの数と必要な数の間により広いギャップがある場合、組み合わせの数は爆発する可能性があります。 –

+0

私はTwitterでこれをリンクしました。誰かがキーから別のキーを派生させているかどうかを決めることができるということを覚えているので、「暗号」のタグ付けは間違いかもしれないと指摘しました。 –

+0

@Damien_The_Unbeliever、キーは知られていますが、ほとんどの場合、潜在的に既知の10個のキーが存在すると言われています(このコンテキストではどういう違いがありますか?)現在、5つの必須(上記)と潜在的には15倍もの成長とシステムの変更を可能にする生涯です。追加の既知のキーを持つ部分については、APIのセマンティックバージョニングを使用して許可フィールドを制御します。例えばv1.3では、v1.2よりも多くの鍵が使用できます。 v0.9クライアントは、5つの(必須の)キーをすべて提供しないため、1.0 APIを使用できません。 APIフォーマットは現在JSONですが、変更することができます。 (私たちはクライアントを書いた) –

答えて

0

考えられるのは、キーと値のペアごとに異なるハッシュを使用することです。したがって、完全な構造体の「ハッシュ」はハッシュの集合です。

あなたのユースケースが常に同じ順序で5つの同じキーである場合、追加のキーは必須キーとオプションキーのために1つのハッシュを使用できますが、オプションのキーは、オプションのキーを含む別の構造体のスーパーセットです。

わずかな違いは、必要なキーに1つのハッシュを使用し、構造全体に1つのハッシュを使用することです。

キーバリューペアのチェックサムを小さくして、同じものではないものをすぐに破棄することもできますが、何かがより正確であると判断するにはさらに大きなハッシュが必要です一致。

+0

ヒントをいただきありがとうございました。当然、私はハッシュの個々のキーでキーのリストを探し、リストを既に知っているかどうかを判断できます。もし、行くよ。 –

0

暗号化ハッシュは、特にこれらのプロパティを使用して設計されています

  • 彼らは一方向関数です。与えられたハッシュ値、またはこの値にハッシュするランダム入力さえも、特定の入力を再計算することは事実上不可能です。
  • 入力サイズが固定出力サイズよりもはるか大きい場合は衝突が必要で​​すが、同じハッシュ値になる2つの異なる入力値を見つけることも実際には実行不可能です。
  • 全く同じ入力値は、常に同じハッシュ値にハッシュされます。
  • 入力の小さな変化は、全く異なるハッシュ値になります。単一の入力ビットを反転すると出力ビットの平均で50%変化します。

このように、暗号化ハッシュは実際には任意のバイナリデータの一意の識別子として使用できます。 "name:codebeaker"でも "name:Codebeaker"とは異なるハッシュを持っています。

固定キーの順序が固定されていて、常に完了し、新しいキーでのみ拡張され、各キーには1つの許可された表現しかない場合は、古いキー5個のハッシュを計算し、現在のセットの既存のハッシュ

キーが常に一意であるが、セットを混在させることができる場合は、キーごとに別々のハッシュを計算してストアし、既存のセットを別のデータベースで検索できます。

これを超えると、暗号化ハッシュがジョブの適切なツールにならないことがあります。

[編集]

別のアプローチは、最初のアルファベットキーをソートした後、ソートセットからハッシュ値を取ることです。これで、注文を気にすることなくセットを識別できるようになりました。最初に単一のキーの個々のハッシュを取り、代わりにハッシュをソートし、ソートされたハッシュのリストにハッシュを取るほうが現実的かもしれません。これには依然としてユニークキーが必要です。

+0

ありがとう@secure - 私は暗号のハッシングでかなりうまくいきますが、それはここに来る他の人を助けるはずです。おそらく、あるキーが別のキーから派生しているかどうかを判断できるのはどうですか? (これは私が想像している機能ですか?)SSL証明書のアップグレードの場合、警告を回避するために、新しい鍵は暗号で元の証明書の派生/子として表示されるように設計されています(もちろん、 –

+0

@Beaks:証明書は非常に複雑で、多くのデータが含まれています。暗号化ハッシュを使用して、親証明書で署名されます。署名は、親証明書からのものであることを確認することができます。しかし、あなたがすることができる第三の考えがあります、私は私の答えを拡張します。 – Secure

関連する問題