Algorithm 一个强大的函数,用于哈希字符串并将其还原

Algorithm 一个强大的函数,用于哈希字符串并将其还原,algorithm,hash,Algorithm,Hash,我正在寻找一个强大的散列函数(算法)来散列我的代码我想将散列字符串恢复为原始字符串。 (我可以将sha还原为原始吗?) 你能帮我吗?散列算法是一种方法,所以你不能从散列中还原原始文本。散列算法是一种方法,所以你不能从散列中还原原始文本。你不能从散列中还原原始数据,因为它在设计上是不可逆的。通常的解释是-大多数哈希值大约为128-256位,因此大小为16-32字节。只要字符串比这个长(甚至在此之前),就会有两个具有相同哈希的字符串。这被称为一个 还请注意,短于16-32字节的字符串通常可以反转,尽

我正在寻找一个强大的散列函数(算法)来散列我的代码我想将散列字符串恢复为原始字符串。 (我可以将
sha
还原为原始吗?)


你能帮我吗?

散列算法是一种方法,所以你不能从散列中还原原始文本。

散列算法是一种方法,所以你不能从散列中还原原始文本。

你不能从散列中还原原始数据,因为它在设计上是不可逆的。通常的解释是-大多数哈希值大约为128-256位,因此大小为16-32字节。只要字符串比这个长(甚至在此之前),就会有两个具有相同哈希的字符串。这被称为一个

还请注意,短于16-32字节的字符串通常可以反转,尽管您不应该依赖于此,因为也可能存在冲突。例如,散列一些字符串,比如
test
,然后在谷歌上搜索散列


尽管如此,即使是
test
和其他一些短单词也可能有相同的哈希值,因此您永远无法100%确定是否得到了正确的字符串。

您无法从哈希值还原原始数据,因为它在设计上是不可逆的。通常的解释是-大多数哈希值大约为128-256位,因此大小为16-32字节。只要字符串比这个长(甚至在此之前),就会有两个具有相同哈希的字符串。这被称为一个

还请注意,短于16-32字节的字符串通常可以反转,尽管您不应该依赖于此,因为也可能存在冲突。例如,散列一些字符串,比如
test
,然后在谷歌上搜索散列


尽管如此,即使是
test
和其他一些短单词也可能有相同的哈希值,因此您永远不会100%确定您的字符串是正确的。

我认为您的术语是错误的。“散列”是一种单向加密算法;根据定义,您不能“反散列”已散列的字符串(如果您可以使用比a更有效的方法“反散列”字符串,则散列算法易受攻击,不应使用)。散列的目的是提供一个唯一的替换值,通常具有固定的长度,可以在不公开用于生成散列的明文的情况下进行精确相等的比较

如果您希望强大的信息隐藏,同时在程序中保留恢复原始值的能力,那么您只需要加密。我建议使用AES或Rijndael之类的对称加密算法。您使用与加密相同的密钥进行解密,因此您可以将密钥隐藏在代码或数据库中的某个位置,并对以前加密的内容进行解密。您通常会丢失大多数散列的固定长度属性;在密码之类的情况下,明文字符串的长度以及密文的长度通常是自限的


如果您通常不需要对数据进行解密,但通常需要对数据进行加密(例如,您正在使用算法对DB存储的密码进行“散列”,但如果用户忘记密码,则需要保留对密码进行解密的能力),则可以使用非对称算法,如RSA。一个密钥,即公钥,用于加密字符串,然后另一个密钥,即私钥,用于解密字符串。您可以将公钥放入程序集中,即使它已反编译,攻击者也无法使用程序集中的密钥读取密码。您的私钥应该非常安全地存储在您自己系统中的一个私有位置,并且不会与任何代码对象一起推出,它是唯一可以解密用公钥加密的字符串的东西。

我认为您的术语是错误的。“散列”是一种单向加密算法;根据定义,您不能“反散列”已散列的字符串(如果您可以使用比a更有效的方法“反散列”字符串,则散列算法易受攻击,不应使用)。散列的目的是提供一个唯一的替换值,通常具有固定的长度,可以在不公开用于生成散列的明文的情况下进行精确相等的比较

如果您希望强大的信息隐藏,同时在程序中保留恢复原始值的能力,那么您只需要加密。我建议使用AES或Rijndael之类的对称加密算法。您使用与加密相同的密钥进行解密,因此您可以将密钥隐藏在代码或数据库中的某个位置,并对以前加密的内容进行解密。您通常会丢失大多数散列的固定长度属性;在密码之类的情况下,明文字符串的长度以及密文的长度通常是自限的


如果您通常不需要对数据进行解密,但通常需要对数据进行加密(例如,您正在使用算法对DB存储的密码进行“散列”,但如果用户忘记密码,则需要保留对密码进行解密的能力),则可以使用非对称算法,如RSA。一个密钥,即公钥,用于加密字符串,然后另一个密钥,即私钥,用于解密字符串。您可以将公钥放入程序集中,即使它已反编译,攻击者也无法使用程序集中的密钥读取密码。您的私钥应该非常安全地存储在您自己系统中的一个私有位置,并且永远不会与任何代码对象一起推出,它是唯一可以解密用公钥加密的字符串的东西。

没有意义。用例是什么?你想加密吗?你提到了SHA,它是一种加密哈希算法,加密哈希的要点是它们(应该)是不可逆的。如果你想要可逆性,也许你真的想要像AES这样的双向加密?没有意义。用例是什么?您想加密吗?您提到了SHA,这是一种加密哈希算法,以及cr的要点