我知道如何加密:我如何解密使用Python hashlib?
encrypted = hashlib.sha256('1234').hexdigest()
,但我不知道如何解密这个?
decrypted = decrypt(encrypted)
我知道如何加密:我如何解密使用Python hashlib?
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:
The ideal cryptographic hash function has four main properties:
1. it is easy to compute the hash value for any given message
2. it is infeasible to generate a message that has a given hash
3. it is infeasible to modify a message without changing the hash
4. it is infeasible to find two different messages with the same hash.
如果你能扭转这种局面,那么你会被打破规则。这些规则允许一个告诉另一方,他们有一些信息(如密码),没有透露信息。例如,参见维基百科:http://en.wikipedia.org/wiki/Cryptographic_hash_function#Illustration
如果您需要可逆性看Simple way to encode a string according to a password?,你可以使用一些薄弱像Vignere,但也有使用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?
简短的回答是,你不能“解密”散列;它是一种单向函数。加密和散列之间有一个主要区别。
散列
见http://en.wikipedia.org/wiki/Cryptographic_hash_function
注:这是可能的 'BREAK' 某些散列算法,但这不是解密。你会发现在链接的详细信息,以及为也被蟒蛇支持其他算法
加密
和http://en.wikipedia.org/wiki/Encryption
例
散列的一个有用的例子是将密码存储在数据库中,而一个有用的加密示例是将您的银行详细信息发送到在线商店购买。
的哈希值,采用单向函数计算的,即它会给出一个特定的输入输出相同,但它仅仅是一个单向函数,不管你做什么,你不能解密。一个可以尝试通过蛮力解密它,即从字典计算的话哈希值,并将它与要解密的哈希值进行比较。 为了节省计算的字典中的单词的哈希值的时候,有彩虹表包含的话哈希在网上提供。
读:http://en.wikipedia.org/wiki/Rainbow_table
您还可以使用在线服务的哈希的蛮力解密。如果要解密的单词属于字典,则有很多可用的功能,并且效果很好。
这是一个有效的问题,也许不会带来正确不过。
OP,我想你要做的是检查一个哈希值与未哈希值?
hashed = hashlib.sha256('1234').hexdigest()
hashedstring = '1234' + ',' + 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
其中输入h是格式的字符串 “缬氨酸,(HASHEDSTRING)”
和hash_str是散列函数。
不是非常精确打个比方:加密是像一个人穿着伪装......采取哈希就像是走自己的指纹!
你可以通过去除/扭转伪装将“原始”人物带回来,但是你无法从一组指纹中做到这一点!
这不是哈希的工作方式。一般来说,散列的整点是它不能被撤消。散列不是一种加密技术。 – BrenBarn 2013-04-11 19:16:12
[wikipedia](http://en.wikipedia.org/wiki/Hash_function)有关于哈希的不错文章 – 2013-04-11 19:17:08
想想看吧。如果你可以“解密”SHA256的非常短的32个字节的散列,你将有最终的压缩方法。但是,对于任何长于散列的数据,当然不能存在散列冲突,换句话说,产生相同散列的不同数据(但是使用像SHA256这样的密码安全散列,您实际上无法找到或创建冲突当前或可预见的计算机)。 – hyde 2013-04-11 19:22:05