哈希加解密常见脚本及注意事项
要得到哈希比较的字符串
注意大小写
有时候,拿到的将要比较的字符串的字母部分是大写的
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], ...) 就可能误伤这些字符!

浙公网安备 33010602011771号