哈希加解密常见脚本及注意事项

要得到哈希比较的字符串

注意大小写

有时候,拿到的将要比较的字符串的字母部分是大写的

for i in range(10000, 9999999):
    encrypted = hashlib.md5(str(i).encode()).hexdigest()
    if encrypted.upper() == Str:
        print(i)

.upper()转为大写就可以

将要比较的字符串是经过异或后的

有时候,拿到将比较的字符串可能经过异或

常用的正确脚本,设置一个str接收异或后的值

import hashlib
a = "0kk`d1a`55k222k2a776jbfgd`06cjjb"
b = "SS"
Str = ""
for i in range(len(a)):
    Str += chr(ord(a[i]) ^ ord(b[i % 2]))
print(Str)


for i in range(10000, 9999999):
    encrypted = hashlib.md5(str(i).encode()).hexdigest()
    if encrypted == Str:
        print(i)

如果想不修改字符串

正确的常用脚本

import hashlib
a = "0kk`d1a`55k222k2a776jbfgd`06cjjb"
b = "SS"
a = list(a)
for i in range(len(a)):
    a[i] =  chr(ord(a[i]) ^ ord(b[i % 2]))
a = "".join(each for each in a)
print(a)

for i in range(10000, 9999999):
    encrypted = hashlib.md5(str(i).encode()).hexdigest()
    if encrypted == a:
        print(i)

原理是将字符串a变为列表a,改变之后:"".join(each for each in a)即可

错误的常用脚本

import hashlib
a = "0kk`d1a`55k222k2a776jbfgd`06cjjb"
b = "SS"
Str = ""
for i in range(len(a)):
    a = a.replace(a[i], chr(ord(a[i]) ^ ord(b[i % 2])))


for i in range(10000, 9999999):
    encrypted = hashlib.md5(str(i).encode()).hexdigest()
    if encrypted == a:
        print(i)

错误原因在于replace

replace(a[i], ...) 会替换所有相同字符的位置!

比如 a = "hello",里面有多个 'l'。当你执行:

a = a.replace('l', new_char)

它会把所有 'l' 都替换成 new_char!

你在循环中修改了 a,导致后面迭代的索引错乱!

此时原来的 'l' 仍然存在,而如果前面某个字符被改成了 'l',那 replace(a[i], ...) 就可能误伤这些字符!

posted @ 2025-05-02 20:15  Bri1  阅读(43)  评论(0)    收藏  举报