2013-09-23 29 views
0

我有麻煩保存,獲取和比較來自mysql數據庫的加密哈希。將「加密」模塊生成的哈希保存到mysql

如前所述,我使用'crypto'模塊來生成散列(該散列包含特殊字符)。

我的表格正在使用「utf8_unicode_ci」排序規則。 因爲這些特殊的字符,我有麻煩保存哈希到數據庫。 所以,我試圖用這個方法:

exports.real_escape_string = function real_escape_string(str) { 
    return str.replace(/[\0\x08\x09\x1a\n\r"'\\\%]/g, function (char) { 
     switch (char) { 
      case "\0": 
       return "\\0"; 
      case "\x08": 
       return "\\b"; 
      case "\x09": 
       return "\\t"; 
      case "\x1a": 
       return "\\z"; 
      case "\n": 
       return "\\n"; 
      case "\r": 
       return "\\r"; 
      case "\"": 
      case "'": 
      case "\\": 
      case "%": 
       return "\\" + char; // prepends a backslash to backslash, percent, 
       // and double/single quotes 
     } 
    }); 
}; 

這一工作,並沒有管理散列保存到數據庫,但由於某些原因,它保存到數據庫中時,它改變了哈希本身。 我使用,以著名的MySQL的模塊來訪問和MySQL數據庫上執行操作:

var mysql = require('mysql'); 

還有什麼我能試試嗎?

回答

1

保存到數據庫時使用base64,然後在讀取時解碼。

+0

這正是我所做的除了解碼部分(我將用戶輸入轉換爲base64和比較)。我應該如何解碼base64回來? – ohadinho

+1

這兩種方法都有效。您可以將用戶輸入轉換爲base64並進行比較,或者將數據庫base64解碼並與'hash(user_input)'進行比較。我個人覺得解碼更好,因爲我腦海中的base64是數據庫層邏輯的一部分,它是一個實現細節,所以使用數據庫層的代碼不需要知道它。 –

+0

你用什麼來解碼從base64到二進制? – ohadinho