2015-12-30 232 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

啊,是的..謝謝!我明白現在的差異。我應該說加密或混淆。 –