使用 MS Excel 進行反向哈希

使用 MS Excel 進行反向哈希

我在 YouTube 上觀看了一個名為“A4 紙拼圖影片中,演示者拿一張 A4 紙,按照一定的方式折疊,然後要求觀眾計算週長,但沒有給出答案,而是給出了一種使用哈希檢查答案是否正確的方法。

知道正確答案的順序是 = 取出答案,在計算器上單擊 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 中。

現在我陷入了困境,我假設我可以使用 Goal Seek 透過更改 A5 將 K5 設定為等於 234477,但它找不到解決方案。

我不想使用程式碼/巨集來查找答案或手動操作(例如排序等),我喜歡觀看目標搜尋並嘗試解決方案並能夠「看到」解決方案的路徑的想法。

有誰知道我怎麼才能完成這件事?

公式
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)
(LIST)I5:I10 = MID($F$5,3,1)*1 [每行 3 加 1]
J5:J10 { = INDEX(列表, MATCH(SMALL(COUNTIF(列表, "<"&列表), ROW(1:1)), COUNTIF(列表, "<"&列表), 0))}
K5 = J5&J6&J7&J8&J9&J10

在此輸入影像描述

編輯:也許我不應該使用Goal Seek,它可能有限制,即使我輸入目標123789,它仍然找不到起始值42。

答案1

一般來說,您應該嘗試找到一種不僅對您的解決方案有效的演算法。
甚至盡量加快計算速度。

錯誤的解決方案

  • A5它將保留您的初始值
  • B5 =A5^(1/32),是的,一點數學知識
    (SQRT(x) 相當於 x^1/2;執行五次意味著 1/2*1/2*.... = 1/32)
  • C5 =Mod(B5,1)
    在這裡你不能簡單地做1-x:想像一下它是 2.smth 還是 0.smth...

    MOD 函數傳回數字除以除數後的餘數。

  • D5 =3-TRUNC(LOG(C5,10))
    您需要取第一個不為零的數字(函數 Log 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

以下是解決方案:

在此輸入影像描述

這是 SHA256 的 bash 程式碼


這裡是 SHA256 StartSeq=1的 bash 程式碼;結束序列=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

答案2

感謝哈斯塔我找到了一種讓 Goal Seek 發揮作用的方法。到目前為止,它已經為我找到了兩個解決方案 -

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

現在您可以尋找目標J5234477透過改變A5

在此輸入影像描述


解決方案

在此輸入影像描述

相關內容