2015-12-30 165 views
1

我有一个字符串,我想哈希,让它看起来像51e7fae2d7b2b5388de06bc205e4a3ca。然后我希望能够去除它(不含盐)。我知道这根本不安全,但这不是为了安全。我已经尝试过使用NodeJS的加密,但似乎没有办法检索MD5哈希(不使用某些大型数据库)基本字符串哈希/去哈希

+2

你不能去散列的东西。这就是哈希如何工作。散列的重点是可以散列的东西,但不能去散列它们。如果你想能够去散列的东西,你应该使用加密而不是哈希。 – Markasoftware

+0

我明白了,我对哈希有错误的想法!谢谢。 –

回答

2

散列是一种方式,不可逆转。你想要的是编码和解码。 Base64经常用于你想要的东西:

// encode 
new Buffer("Hello World").toString('base64'); 
//=> SGVsbG8gV29ybGQ= 

// decode 
new Buffer("SGVsbG8gV29ybGQ=", 'base64').toString('ascii'); 
//=> Hello World 
+0

可以工作,但它根本不安全,因为base64可以在没有密钥的情况下取消base64。但是OP说这不是为了安全。 – Markasoftware

+0

对,不是为了安全。如果只是为了生成模糊表示,这是有效的。 –

+0

工程就像一个魅力。 –

1

哈希不能被去散列。你想要做的是完全不可能的。最接近的事情是在数据库中查找散列,但真正去散列MD5是不可能的。

下面是如何使用散列(用于在网站上登录):当用户创建帐户时,密码被散列,并且散列存储在数据库中。然后,每当他们尝试登录时,他们输入的密码都被散列,并且如果散列与数据库中的散列匹配,那么他们必须拥有正确的密码。

这样做的好处是,如果黑客设法访问数据库,他们仍然无法访问用户的密码;他们所有的就是哈希。由于哈希不能转换回原来的密码,黑客已经有效地设法访问一些随机的字母数字字符。

如果你想能够“去散列”的东西,那么你应该使用加密来代替。 CryptoJS支持AES加密,这可能是最流行的算法。

+0

啊,是的..谢谢!我明白现在的差异。我应该说加密或混淆。 –