MS Excelによる逆ハッシュ


0

YouTubeで 'というビデオを見ていました A4紙パズル その中で、発表者はA4用紙を1枚取り、それを特定の方法で折り曲げてから、周囲の長さを計算するように視聴者に求めますが、解決策は提示せず、代わりにハッシュを使用して正しい答えがあることを確認する方法を示します。

正しい答えを知るための手順は次のとおりです。答えを導き、電卓でsq rtを5回クリックし、次に結果から小数点の右側にある6桁を取り出し、それらを数字の昇順に並べ替えます。 234477と等しいあなたは正しい答えを持っています。

そのため、境界を計算するのではなく、ハッシュを逆にして解を求めたかったのです。それで私はExcelを起動し、A5で私は候補者番号(例えば42)を入力し、それからB5からF5で私は平方根を始めました。 G5では1を引いて0.123897073を得て、H5では100万を掛けて123897を得て、次にI5:I10でそれぞれの数を抽出しました。 J5:J10では、式を使って番号をソートしたので、J5-1、J6 = 2、J7 = 3、J8 = 7、J9 = 8、J10 = 9、そして最後にK5ですべての番号を連結して123789とターゲット234477をL5に配置しました。

A5を変更することで、Goal Seekを使用してK5を234477に設定することができたとしたら、ここで問題が解決しません。

ソートやその他の答えや手動操作を見つけるためにコード/マクロを使用したくはありません。GoalSeekを見て解決策を試し、解決策への道を「見る」ことができるという考えが好きでした。

誰もが私がこれを完了することができる方法を知っていますか?


A5 =ユーザー入力番号
B5 = SQRT(A5)
C5 = SQRT(B5)
D5 = SQRT(C5)
E5 = SQRT(D5)
F5 = SQRT(E5)
G5 = F5-1
H5 = IF(MID(G5,3,1)* 1 = 0、G5 * 10000000、G5 * 1000000)
(リスト)I5:I10 = MID($ F $ 5,3,1)* 1 [1行につき3ずつ1ずつ増加]
J5:J10 {= INDEX(リスト、MATCH(小(COUNTIF(リスト、 "<"&リスト)、ROW(1:1))、COUNTIF(リスト、 "<"&リスト)、0)) }
K5 = J5&J6&J7&J8&J9&J10

enter image description here

編集:多分私は目標123789を入力してもそれはまだ42の開始値を見つけることができない場合でも、それは制限があるかもしれませんゴールシークを使用するべきではありません。

回答:


0

一般的には、あなたの解決策だけに有効なアルゴリズムを見つけるべきではありません。
できるだけ早く計算をスピードアップしてみてください。

Wrong solution

  • A5 それはあなたの初期値を保つでしょう
  • B5 =A5^(1/32)はい、ちょっと数学です
    (SQRT(x)はx ^ 1/2と同じです; 5回やると1/2 * 1/2 * .... = 1/32になります)
  • C5 =Mod(B5,1)
    ここでは簡単にはできません 1-x:それが2.smthかどうか想像 0.smth ...

    MOD関数は、数値を除数で除算した後の余りを返します。

  • D5 =3-TRUNC(LOG(C5,10))
    あなたは最初の数字をゼロとは異なる数字にする必要があります 10年 )をスキップして 0. 文字列の
  • E5 =MID(C5,D5,6) ここで文字列を抽出します。
  • F5:F10 次の列関数に対する単純な索引
  • G5 =0+MID($E$5,F5,1) F5で数字を抽出します。コピーして貼り付け G5:G10
  • H5 =LARGE($G$5:$G$10,7-F5) を取る 7-F5 番目 範囲から最大 G5:G10 。コピーして貼り付け H5:H10
  • I5 =H5&H6&H7&H8&H9&H10 文字列をもう一度作成します
  • J5 それはHASHの解決策を見つけるために保持します ターゲット
  • K5 =I5=MID(J5,1,6) の文字列を比較する I5 そして から J5

解決策は次のとおりです。

enter image description here

SHA256のbashコードはこちら

SHA256のbashコードはこちら
StartSeq = 1; EndSeq = 5

for i in $(seq $StartSeq $EndSeq) ;
 do 
   [[ $(printf "$i" | sha256sum | awk '{print $1}'| xxd -r -p | base64) \
   == "SyJ3d9TdH8Ycb4hPSGQdArTRIdP9Moywi1Ux/Kzav4o=" ]] && \
   echo "### The Solution is "$i ; 
done

これは使用目的を追求していますか?それは私のために働いていないからです。
Raystafarian

私はMSエクセルを持っていません。私はグーグルのスプレッドシートを使った。 A5に数字を入れると、K5で解が正しいことを確認します。私はあなたがそれを求める目標を使用することができると思います。
Hastur

あなたはE5からすべてのゼロディジットを除外する必要があるようにビデオは私に聞こえます
Raystafarian

ああ、ゴールシークを使うようになった。ありがとうございます。
Raystafarian

@Raystafarianはい、D5で開始位置から計算します(それはポイントの後のすべてのゼロをカットします...基数10のLogを使用して... Log_10(0.1)= -1、Log_10(0.01)= -2 ...)
Hastur

0

Hasturに感謝します Goal Seekが機能する方法を見つけました。これまでのところ私には2つの解決策が見つかりました

4および2340。

大丈夫、だからここで私たちはに基づいて行きます ハスターの答え

もう一度始めましょう A5

  • A5 =任意の数
  • B5 =INT(A5)
  • C5 =B5^(1/32)
  • D5 =INT(MID(C5,FIND(".",C5,1)+1,10))
  • E5 =INT(IFERROR(IF(FIND("0",D5,1)<6,CONCATENATE(LEFT(D5,FIND("0",D5,1)-1),MID(D5,FIND("0",D5,1)+1,10-FIND("0",D5,1)))),LEFT(D5,6)))
  • F5 =INT(IFERROR(IF(FIND("0",E5,1)<=6,CONCATENATE(LEFT(E5,FIND("0",E5,1)-1),MID(E5,FIND("0",E5,1)+1,7-FIND("0",E5,1))),LEFT(E5,6)),LEFT(E5,6)))
  • G5からG10 インデックス1、2、3、4、5、6 - 変更されることはありません
  • H5からH10 =INT(0+MID($F$5,$G5,1)) そのように下にドラッグ $G5 6、7などに増える
  • I5からI10 =SMALL($H$5:$H$10,ROW(A1)) そのように下にドラッグ Row(A1) 増える
  • J5 =INT(CONCATENATE(I5,I6,I7,I8,I9,I10))

これでゴールシークできます J5 234477 変えることによって A5

enter image description here


溶液

enter image description here

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.