从Hashed值中获取值?

Jav*_*ram 4 c# database passwords hashcode

我想从哈希值中找回一个字符串?

string str="Hello";
int hashStr=str.GetHashCode(); // hash value of "Hello" is -694847
Run Code Online (Sandbox Code Playgroud)

我可以从散列值中获取my_string(即"Hello")....

更新

实际上我想在散列后将密码保存到我的数据库中以使其安全...

所以这意味着不同的密码甚至具有相同的价值?

jas*_*son 16

正好有2 ^ 32个哈希码,但方式更多string.因此,通过鸽子原理,必须有多个strings映射到相同的哈希码.因此,从哈希码到逆映射string是不可能的

编辑:对您的更新的响应.

实际上我想在散列后将密码保存到我的数据库中以使其安全...

所以这意味着不同的密码甚至具有相同的价值?

是的,两个密码可能具有相同的哈希值.这基本上是对上述内容的重述.但是你不应该使用GetHashCode哈希密码.相反,使用像SHA-2这样安全的东西.

更进一步,永远不要尝试自己的加密/安全性等.找一个为你做这个的库.


Eri*_*ert 7

实际上我想在散列后将密码保存到我的数据库中以使其安全

您无权实施此代码.

这没什么好坏的.我也没有能力这样做,而且我已经学习了多年的安全系统.通过研究安全系统,我了解到安全系统很难做到正确,需要多年的经验复杂领域的详细专业知识.这就是我知道我不能胜任的方式.您认为哈希可能是可逆的这一事实向我表明您不是安全专家.

我的建议:聘请安全专业人员为您完成此任务.没有必要花很多钱来建立一个实际上并不能保护你资源的糟糕安全系统.而不是现在推出自己的廉价系统,并花费更多的钱来清理灾难,现在花更多的钱在前面,并获得专业的实施.

此外,GetHashCode的文档明确指出它不适合用于密码哈希,因为算法可以随时更改.实际上,哈希算法确实在CLR v1和CLR v2之间进行了更改,这使得依赖于GetHashCode的每个供应商都破坏了升级其系统的密码哈希.GetHashCode 不稳定,它不安全,它不是加密强度,它不是基于任何行业标准算法. 请勿在任何情况下将其用于加密散列.


Pau*_*sik 5

这里缺少的一个答案是向OP解释散列不是加密的.对于需要首次处理安全问题的初级程序员(我自己也包括在内),术语哈希和加密常常令人困惑.

  • 来自维基百科:哈希函数是任何明确定义的过程或数学函数,它将大量可能可变大小的数据转换为小数据,通常是一个整数,可以作为数组的索引(参见关联数组) ).哈希函数返回的值称为哈希值,哈希码,哈希值,校验和或简单哈希值.
  • 来自维基百科:加密是使用算法(称为密码)转换信息(称为明文)的过程,使除了拥有特殊知识的人(通常称为密钥)之外的任何人都无法读取.

编辑更新:

  1. 是.尽管不太可能并且高度依赖于散列算法的类型,但是两个或更多个不同数据的散列可以产生相同的值.
  2. 密码散列通常用于保护数据库中的密码.但是,您无法解密密码.如果要哈希它们,则必须评估哈希值以确保它们匹配.这是用于哈希密码的特定于ASP的策略.这是一个很好的阅读,特别是如果您正在使用Web技术