Sha256
我在哪裡可以看到將散列到解決方案的輸入?
因此,據我所知,有一些輸入(塊頭)需要更改(通過隨機數或其他機制),這些輸入(塊頭)通過 SHA256 執行以生成具有 X 數量的前導 0 的輸出。
我已經嘗試(手動),只是為了好玩,找到一個輸入,即使沒有運氣也可以散列到 2 個連續的前導 0。
我在哪裡可以找到輸入,以便我可以將其散列到正確的輸出?
對組成塊的字節進行排序以便您可以散列它們似乎相當複雜,但如果您要查找的只是一個散列到以幾個零開頭的任意字元串,您可以使用簡單的 shell 命令進行搜尋:
$ i=0; while true; do echo -n $i | sha256sum | grep -q '^000' && echo $i $(echo -n $i | sha256sum); ((i++)); done 886 000f21ac06aceb9cdd0575e82d0d85fc39bed0a7a1d71970ba1641666a44f530 - 1039 00037f39cf870a1f49129f9c82d935665d352ffd25ea3296208f6f7b16fd654f - 3633 00039a15178b11924de22fd1a02f6efb00d8af33c171a6b67614871e8d6012da - 5848 000c15d0ea8224c9649c9adee30c3030ee769b2b5f6d6594f94d446adf60396b - 12823 000b07fd81c1770b514fb2998527b682c4600e0e76868011bae89a265505f652 - 20069 0002dc999ce736640267221e6a004da4b837667ca7de5c8eb92832927495013f - 21098 0007256972781977cbceab0e2cbdc57e20512a6f2975296852029da5bc8aad30 - 21244 0002a1cf14e9c1acaa8255fd6777d916d3aec6bc1f3c8a3d0a3a89a5eba87970 - 22244 00092cab56c063b7dadedbb2282decacf40d6eb31319a7ef9a6e7e7a5e0d49b7 - 23452 000f910e13e5d1b34df0a3a0fb537acaf513be60d650286e45dcdbd3d8e698f6 - 30050 000954408f96d137e3cfe0711be7856f44c4b6821d5a5d4955c87748a34118ed - 32754 000faf0e6178d6edb8490f90dcbbc33d33bf0de4783b5722bdcefff05d8748b1 - 41697 000580eb995f2a45fffce7c2651e542668ea65c1b4b89f5057601698894009ae - 48559 000eb4a177d716901148633ce477d51675b2677ba45fbc0da5125d35e1feb52b - 51623 0006412efdac205d9da274bf441e567da353fc59ee098239255bf532c9562e90 - 53278 0006220135126a47891f08c4dea54763bcb3675d322e49f064ed80c1491a422a - 60147 000f008e65121d99595e27fcb7a6ba12bc85db5289bd36b00a2654170d8d8404 - 64478 00060ae0df51bd4b2a190eb8d8bd927426601899b2bbee136a4d06dd1f39159b - 65565 000b1e1a1268f245d534e7c9ea2cef6c7123e66c9ffa5ea8848e2319d163662f - 77379 00064a5ab8c2a955d74b6b1e537d76314c61811323c803dd38cbe1c9ed111620 - 84057 0006da78c87d0454d102ec03e609a7b1a22381693e020ab1ebdf0050af9f7a7c - 86423 0009d671d687b1e712a501a25b1887bb93d091144d294a03e7368df35faeebfc - 88484 0000a456e7b5a5eb059e721fb431436883143101275c4077f83fe70298f5623d - 90947 000318ec4d26f57a5facb03401d2f879a4b5c3cb95bc2bdca378ce078833733d - 91415 0001528a3705455624f234a9066cca979b7516cdc417f5e39845b32eb107d467 - 94286 000846f85c9630becba208506e1585d2b09340e33860887403a56fd4eeaa7ea0 - 96635 0001da624eada828c3f744b73bacd8e15cf0d3e288bd092d68167dd1bab66e76 - 96952 00064ea7e7d6798cc16d9e7723150ee9a170416f05a61b7d45edd2c28ecd69f6 -
在這裡,我正在對數字字元串進行雜湊處理並蒐索至少以三個零開頭的雜湊值。您可能希望平均每 4096 次嘗試找到一個,但我們很幸運,在前 4096 次嘗試中找到了三個。shell 命令將永遠執行。在前 100,000 次嘗試後,我切斷了一次輸出。
我們希望每 65,536 次嘗試找到一個以 4 個零開頭的雜湊,實際上我們需要 88,484 次嘗試才能找到第一個:
$ echo -n 88484 | sha256sum 0000a456e7b5a5eb059e721fb431436883143101275c4077f83fe70298f5623d -
echo 的“-n”標誌意味著“只輸出 88484,不要在末尾添加換行符”。換行符會改變雜湊。
我們還可以搜尋官方 Scrabble 詞典中的單詞列表,找到雜湊以四個或更多零開頭的五個單詞:
$ cat ~/sowpods.txt | tr A-Z a-z | while read x; do echo -n "$x" | sha256sum | grep -q '^0000' && echo $x $(echo -n $x | sha256sum); done debearded 0000fa20ee307c4f15a53bf69ae0ca1c66c675b0ae94781ff5b6f8cff90ebcca - goaltenders 00002e68c9d3d1fc5d3178bee91040efbeb4ac9ea7722c834fa5d71b2e3845cd - guilefulness 0000d79e1c6964e6806e9bbdaaaecb63dfabdb498f72bf28944119de1fe90d63 - mismatchment 0000bb6ede9f29a01d35e15320229aa0fbd73cf8eb8bc0aac80d6a97fba63fee - santalins 00008514dabda7cffdb10f57e492fadbd8e0cab00427e0bfa4f54248b602a4f0 -
大寫單詞也一樣:
$ cat ~/sowpods.txt | while read x; do echo -n "$x" | sha256sum | grep -q '^0000' && echo $x $(echo -n $x | sha256sum); done APPLICANT 0000ca01adc973c2a5a8e6a30134f07396d088b6d65025292f6ff97b237cab4d - JACKEROOED 0000182955fd82edd0acc949ea5050a0f8c7107c5dbed07f94f474cc1c31be90 - KYE 0000331b9f8ffef05bbee59dca2a7b03e281e22bf1d3d9324f607ad8eb1fbb64 - RECREANCES 0000392b2a9f2d9ff2bbc35b8fddfdbb91f73cb7a43602782280ae69d13146e3 - SCHILLERIZE 000010f44bb61a7805f10dbd90c3c51a67da52001858ee45e0d015c38a344fb1 - STRIVINGLY 000034f8005572e686cc2f4628107bd16e339d86cbe4d5309105ebb42e8b07dd - UNDETERRED 00006433ddbde4028b88a4ca8d6c578641462697134bd1936693a1f1b05b4224 - WIDDIES 000000c71f1bda5b63f5165243e10394bc9ebf62e394ef7c6e049c920ea1b181 -
注意
WIDDIES
是唯一一個以五個零開頭的散列(它實際上以六個零開頭 - 1670 萬分之一的機會),使其成為(官方英國英語拼字遊戲)具有最低 sha256 散列的單詞。