0
mysql DB에서 암호화 해시를 저장하고 가져오고 비교하는 데 문제가 있습니다.'crypto'모듈에 의해 생성 된 해시를 mysql에 저장합니다.
언급 한 바와 같이, 해시를 생성하기 위해 'crypto'모듈을 사용하고 있습니다 (해시에는 특수 문자가 포함되어 있음).
테이블이 "utf8_unicode_ci"데이터 정렬을 사용 중입니다. 이러한 특수 문자가 있기 때문에 해시를 DB에 저장하는 데 문제가있었습니다. 그래서, 나는이 방법을 사용하려했습니다
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
}
});
};
근무하고 그것을 DB에 해시를 저장 관리 못했지만, DB에 저장하는 경우 어떤 이유로이 해시 자체를 변경합니다.
var mysql = require('mysql');
내가 다른 무엇을 시도 할 수 있습니다 : 나는 액세스와 MySQL 데이터베이스에서 작업을 수행하기 위해 유명한 MySQL의 모듈을 사용하고 있습니다?
그건 정확히 내가 한 .. 디코딩 부분을 제외하고 (나는 사용자 입력을 base64로 변환하고 비교하고있다). base64를 어떻게 해독해야합니까? – ohadinho
두 방법 모두 작동합니다. 사용자 입력을 base64로 변환하고 비교하거나 DB base64를 디코딩하고'hash (user_input) '와 비교할 수 있습니다. 개인적으로 디코드하는 것이 더 좋습니다. 왜냐하면 내 마음에있는 base64는 DB 레이어 로직의 일부이기 때문에 구현 세부 사항이므로 DB 레이어를 사용하는 코드는 그것에 대해 알 필요가 없습니다. –
base64에서 바이너리로 디코딩하려면 무엇을 사용합니까? – ohadinho