首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >哈希字符串的强函数并将其还原。

哈希字符串的强函数并将其还原。
EN

Stack Overflow用户
提问于 2011-09-19 19:26:50
回答 3查看 1.3K关注 0票数 1

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

你能帮帮我吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-09-19 19:33:07

您不能从哈希还原原始数据,因为通过设计它是不可逆的。通常的解释是针孔原理 -大多数散列大约是128-256位,所以16-32字节的大小.只要您的字符串比此更长(甚至在此之前),就会有两个具有相同哈希的字符串。这叫做碰撞

还请注意,短于16-32字节的字符串通常可以反转,尽管您不应该依赖这一点,因为也可能发生冲突。例如,散列一些字符串,比如test,并在Google上搜索哈希。

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

票数 4
EN

Stack Overflow用户

发布于 2011-09-19 19:27:58

哈希算法是一种方法,因此不能从哈希恢复原始文本。

票数 0
EN

Stack Overflow用户

发布于 2011-09-19 19:40:08

我想你的术语错了。“散列”是一种单向加密算法;根据定义,不能“去散列”哈希字符串(如果可以使用比生日攻击更有效的方法“去散列”字符串,则哈希算法易受攻击,不应使用)。散列的目的是提供一个唯一的替代值,通常具有固定的长度,可以比较精确的相等性,而不公开用于生成哈希的明文。

如果您想要强大的信息隐藏,同时保留程序中获取原始值的能力,那么您只需要加密。我推荐一些像AES或Rijndael这样的对称加密算法。您可以使用相同的密钥进行解密和加密,这样您就可以将密钥隐藏在代码或数据库中的某个地方,并解密以前加密过的内容。您通常丢失的是大多数散列的固定长度属性;对于密码这样的情况,明文字符串的长度以及密文的长度通常是自我限制的。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7476217

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档