出題記事
今回のパズルは、
下記文字列郡を組み合わせて、
提示されたのハッシュ値を求める問題でした。
文字列郡
・じゃがいも
・ぎゅうにく
・にんじん
・たまねぎ
・しょうゆ
・みりん
・さとう
求めるハッシュ値
E4CBC1F45125B84689192B8275765870DA869A0B291EECB2614E00045E910445
ハッシュ関数は、特定の文字列から、
固有のハッシュ値を決定します。
今回の問題は、その特性を応用させ、
以下の性質を使った問題となっています。
1,食材を組み合わせる順番によって、固有のハッシュ値ができる。
例として、
・じゃがいもにんじん
・にんじんじゃがいも
の、ハッシュ値の違いを見てみましょう。
元文字列:じゃがいもにんじん
2BDF60B727CBC98D52E249802AC1ECC2DBAFDAB086E8FD5D6DA6E7993BBED83C
元文字列:にんじんじゃがいも
ABE5D5F0F79A8FAF1423D5136E36B92AA75A48BF22E7BAFBC6D63377160D234A
2,ハッシュ値を文字列とみなし、更にハッシュ関数に渡すことができる。
例として、
・じゃがいも
・「じゃがいも」のハッシュ値
の、ハッシュ値の違いを見てみましょう。
元文字列:じゃがいも
722CF2D6C6AE2F34BDBA5CB52489DDCF3CA82A7D4E6C5C562470ECC54BF9423A
元文字列:上述のハッシュ値
EE180EF5B60E1D6CDF407462FD7B1FE27F98FDF2538019A86E3BE52C6688A00D
5段階に分けられます。
step1 各食材のハッシュ化
step2 食材の順列の決定
step3 食材のグループ分け
step4 グループ毎のハッシュ化
step5 グループをまとめてハッシュ化
後述のプログラムでは、
このステップに沿って全組み合わせを、
総当たりで調べました。
ここでは各段階での、
結果のみを提示します。
step1 各食材のハッシュ化
元文字列:じゃがいも
722CF2D6C6AE2F34BDBA5CB52489DDCF3CA82A7D4E6C5C562470ECC54BF9423A
元文字列:ぎゅうにく
00AE539054765F6E4E27E9180B1AA37906B26F6D82570691D747D7B818B64B59
元文字列:にんじん
1DF7AAD047D26CC616847A814E61204BB04927E0948C7DA0A8A9BB41DB65F5BF
元文字列:たまねぎ
C01884D87117A091EEE095202C58584936E21E45F66C9483CE43B9C997F59417
元文字列:しょうゆ
4D10A623DC9C87296EAF5535C6F72ED790364743686C0E6E5AE9F91B36F17F3D
元文字列:みりん
CFD27AA9E4EC3301FE2DECAF7FB02AD37CA438436FC0BA2F26E011AB262B5B11
元文字列:さとう
1694CDCFB1452288CF0A2DE8C9281263BACAA6EFB028CE0F2C2B24809E7FE947
step2 食材の順列の決定
1,ぎゅうにく
2,じゃがいも
3,にんじん
4,たまねぎ
5,さとう
6.しょうゆ
7,みりん
step3 食材のグループ分け
具材グループ
1,ぎゅうにく
2,じゃがいも
3,にんじん
4,たまねぎ
調味料グループ
1,さとう
2.しょうゆ
3,みりん
step4 グループ毎のハッシュ化
各グループ内で
step2で求めた順番通りに
step1で求めたハッシュ値を繋げ
それをハッシュ化します。
具材グループ
元文字列
00AE539054765F6E4E27E9180B1AA37906B26F6D82570691D747D7B818B64B59722CF2D6C6AE2F34BDBA5CB52489DDCF3CA82A7D4E6C5C562470ECC54BF9423A1DF7AAD047D26CC616847A814E61204BB04927E0948C7DA0A8A9BB41DB65F5BFC01884D87117A091EEE095202C58584936E21E45F66C9483CE43B9C997F59417
ハッシュ値
4517DB9A782BAC61AA71E06E9604E75EDBE87BE34B63A4B58648368CEB177639
調味料グループ
元文字列
1694CDCFB1452288CF0A2DE8C9281263BACAA6EFB028CE0F2C2B24809E7FE9474D10A623DC9C87296EAF5535C6F72ED790364743686C0E6E5AE9F91B36F17F3DCFD27AA9E4EC3301FE2DECAF7FB02AD37CA438436FC0BA2F26E011AB262B5B11
ハッシュ値
EDB65E6DE06797FA9E12B873BB321213880A41BB0901C37FA27FA651593575DE
step5 グループをまとめてハッシュ化
step2で求めた順番通り(具材→調味料)に、
step4で求めたハッシュ値を繋げ、
それをハッシュ化します。
元文字列
4517DB9A782BAC61AA71E06E9604E75EDBE87BE34B63A4B58648368CEB177639EDB65E6DE06797FA9E12B873BB321213880A41BB0901C37FA27FA651593575DE
ハッシュ値
E4CBC1F45125B84689192B8275765870DA869A0B291EECB2614E00045E910445
このハッシュ値が、
冒頭で提示した物と一致することが分かります。
求めるハッシュ値
E4CBC1F45125B84689192B8275765870DA869A0B291EECB2614E00045E910445
全文の画像だけ貼っておきます。
ソースはこちらで公開しています。
もし、この記事が人気になるようなら、
このプログラムの解説記事も
書こうかと考えています。
【宣伝】
ALIS非公式discordである、
ALIS Supportersのハッカー部にて活動しています。
この記事についての質問、感想があれば、
気軽にコメント頂けると嬉しいです。