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');
還有什麼我能試試嗎?
這正是我所做的除了解碼部分(我將用戶輸入轉換爲base64和比較)。我應該如何解碼base64回來? – ohadinho
這兩種方法都有效。您可以將用戶輸入轉換爲base64並進行比較,或者將數據庫base64解碼並與'hash(user_input)'進行比較。我個人覺得解碼更好,因爲我腦海中的base64是數據庫層邏輯的一部分,它是一個實現細節,所以使用數據庫層的代碼不需要知道它。 –
你用什麼來解碼從base64到二進制? – ohadinho