我知道如何加密:
encrypted = hashlib.sha256('1234').hexdigest()
但我不确定如何解密这个?
decrypted = decrypt(encrypted)
我知道如何加密:
encrypted = hashlib.sha256('1234').hexdigest()
但我不确定如何解密这个?
decrypted = decrypt(encrypted)
像sha256这样的哈希函数的作用是它应该是单向函数(尽管真正的单向函数的存在仍然是一个未解决的问题,参见http://en.wikipedia.org/wiki/One-way_function)。
注意:http://en.wikipedia.org/wiki/Cryptographic_hash_function:
理想的密码哈希函数具有四个主要属性:
如果您能够反转它,则会违反规则2。这些规则允许一方告诉另一方他们拥有某些信息(例如密码),而不泄露该信息。例如,请参阅维基百科:http://en.wikipedia.org/wiki/Cryptographic_hash_function#Illustration
如果您需要可逆性,请参见Simple way to encode a string according to a password?,您可以使用类似维吉尼亚密码这样的较弱算法,但也有一个使用PyCrypto的示例。
from Crypto.Cipher import AES
import base64
cipher = AES.new(secret_key,AES.MODE_ECB) # never use ECB in strong systems obviously
encoded = base64.b64encode(cipher.encrypt(msg_text))
# ...
decoded = cipher.decrypt(baes64.b64decode(msg_text))
如果您需要一个可逆的哈希函数,请参见Reversible hash function?
这是一个有效的问题,可能没有正确表达。
楼主,我认为你想做的是检查一个已经哈希过的值和一个未经哈希的值是否匹配?
hashed = hashlib.sha256('1234').hexdigest()
hashedstring = '1234' + ',' + hashed
现在需要检查 hashed 是否等于原始值。因此,解析逗号前后的部分。对 1234 进行哈希,然后将其与哈希值进行比较。
def check_secure_val(h):
commapos = h.find(",")
val = h[0:commapos]
hashval = h[commapos+1:-1]
rehashval = hash_str(val)
if rehashval == hashval:
return val
不太准确的比喻:加密就像某人戴上伪装...获取哈希值就像获取他们的指纹!
你可以通过去除/反转伪装来找回“原始”人,但是你无法从一组指纹中做到这一点!
我认为你不能解密它,但你可以尝试使用猜测密码的范围,例如在for循环中将所有密码"{password: hashed password}"放入,然后检查哈希值,也许你会得到正确的密码。
假设你想要破解一个CSV文件中的密码,该密码位于0000-9999之间。
输入的CSV文件应该像这样:
名称,哈希密码
首先,我们需要导入csv和hashlib。
import hashlib
import csv
def decryptor(input_file_name,output_file_name):
# makes hashes
clear_text = ""
mydict = {}
for i in range(0, 10000):
i = str(i).encode('utf-8')
encrypted = hashlib.sha256(i).hexdigest()
mydict[i] = encrypted
现在我们将把它们写入CSV文件中
with open(input_file_name, 'r') as hash_file:
# read's from csv file
reader = csv.reader(hash_file)
hash_dict = {}
# reades every line of csv file
for row in reader:
hash_dict[row[0]] = row[1]
现在我们只需要将要解密的哈希值与我们已有的哈希值比对,就可以得到未加密的密码
check_hash = []
for i in list(mydict):
text = "%s" % (mydict[i])
check_hash.append(mydict[i])
for i in list(hash_dict):
if hash_dict[i] in check_hash:
hashes = list(mydict.keys())[list(mydict.values()).index(hash_dict[i])]
names = list(hash_dict.keys())[list(hash_dict.values()).index(hash_dict[i])],
text = "%s,%s\n" % (names[0], hashes.decode('utf-8'))
clear_text += text
with open(output_file_name, 'w') as passwords:
passwords.write(clear_text)
然后我们只需调用该函数
decryptor(<INPUT CSV>, <OUTPUT CSV NAME>)
这是我的想法,当然你不能直接使用,它只是一个想法,希望能对你有所帮助 :)
这可能有帮助吗?
import hashlib
l = ["riyad", "onni", "arman"]
def check_user(h):
for i in l:
if h == hashlib.md5(i.encode('utf-8')).hexdigest():
return i
print(check_user(hashlib.md5(l[2].encode('utf-8')).hexdigest()))