是否存在乙個字串str,使sha1 str str?

時間 2021-12-26 03:13:00

1樓:

我們來乙個暴破法:

from

__future__

import

print_function

from

binascii

import

unhexlify

from

hashlib

import

sha1

from

itertools

import

product

import

string

# 測試純數字集

deftest_123

():foriin

product

(string

.digits

,repeat=20

):src=''

.join(i

).encode

()dst

=sha1

(src).

digest

()assert

len(

src)

==len

(dst

)assert

type

(src)==

type

(dst

)print('

\r',src

,end=''

)ifdst==

src:

print

(src

)break

# 測試任意位元組串

deftest_any

():foriin

product

('0123456789abcdef'

,repeat=40

):src=''

.join(i

)dst

=sha1

(unhexlify

(src)).

hexdigest

()assert

len(

src)

==len

(dst

)assert

type

(src)==

type

(dst

)print('

\r',src

,end=''

)ifdst==

src:

print

(src

)break

defmain

():# test_123()

test_any

()if

__name__

=='__main__'

:main

()執行時會發現效率感人,看著資料急速變化卻極難擴充套件,就能深切體會到——哪怕存在這樣的串,我們一輩子也找不到。

2樓:Changlong Wu

下面估計一下有限集合上具有不動點的函式個數,由容斥原理容易知道:

所以隨機取的函式中有

的函式有不動點。

所以MD5有2/3的概率存在MD5(str) == str ...

至於如何找到不定點,可以從乙個點開始迭代,然後通過快慢指標檢測迴圈。這個複雜度是指數級的。也可以分析MD5的代數結構開能否通過代數構造降低複雜度。

3樓:玄星

類似的知乎上有個這個問題,下面已經有人給出了如何求解和問題存在解的概率

是否存在乙個字串,它的md5值是其自身? - 演算法

C語言,用陣列定義乙個字串,那這個字串是怎麼儲存在這個陣列中的呢?

the gc 對於scanf的 s的解釋如下 Matches a sequence of non white space characters the nextpointer must be a pointer to the initial element of acharacter array t...

如何通過只翻轉乙個字串的子串對該字串進行排序?

老版題是NP很多人已經給出參考文獻了。新版題是裸dp 設len是字串strls的長度,那麼定義dp len 1 2 表示直到長度x 0 x len 最後一位strls x 1 不翻轉 翻轉 0 1 所需的最小翻轉次數。 yaoyao 反轉兩個字元的子串不就是交換兩個字元的位置嗎?這是氣泡排序呀 喵的...

python如何統計乙個字串中各字元的數量?

Shreck Ye 其實因為字符集是已知而且連續的,直接按字元編碼對映到乙個記憶體陣列裡面效率要比字典更高。不過既然是Python,變數都是用字典存的,效率似乎就無所謂了,更重要的是怎麼寫更簡單更快。這裡用字典也更方便簡單,參照高讚答案用collections.Counter一行就可以解決更好。 2...