Hash
可以破解的玩具雜湊算法
我正在尋找一個玩具散列函式,其想法是讓高中生手動打破(即發現衝突)散列函式,以教他們如何使用單向函式和散列工作。
你碰巧知道這樣的功能嗎?
至於我希望它有多難破解:理想情況下是一個“相當大”的功能,以便根據一些變數它可能更容易或更難,但總的來說我正在尋找大約 10 到 30 分鐘之間的東西。
我喜歡這個答案中的教學方法。但是對於表現得更像散列函式的東西,我們可以定義 $ H $ 對於數字字元串 $ s $ 作為: $ H(s)=(((1||s)\bmod 97)||s)\bmod 99991 $ 在哪裡 $ a||s $ 是在十進製表示之前添加的數字 $ a $ 到字元串 $ s $ .
為 $ H(012345678) $
$ =(((1||012345678)\bmod 97)||012345678)\bmod 99991 $
$ =((1012345678\bmod 97)||012345678)\bmod 99991 $
$ =(37||012345678)\bmod 99991 $
$ =37012345678\bmod 99991 $
$ =77082 $ .
有了一些數學洞察力和很少的額外計算工作,就可以表現出碰撞;簡單地使用電子表格,對碰撞的“蠻力”搜尋也是可行的。