2013-09-23 3 views
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의 모듈을 사용하고 있습니다?

답변

1

DB에 저장할 때 base64를 사용하고 읽을 때 디코딩하십시오.

+0

그건 정확히 내가 한 .. 디코딩 부분을 제외하고 (나는 사용자 입력을 base64로 변환하고 비교하고있다). base64를 어떻게 해독해야합니까? – ohadinho

+1

두 방법 모두 작동합니다. 사용자 입력을 base64로 변환하고 비교하거나 DB base64를 디코딩하고'hash (user_input) '와 비교할 수 있습니다. 개인적으로 디코드하는 것이 더 좋습니다. 왜냐하면 내 마음에있는 base64는 DB 레이어 로직의 일부이기 때문에 구현 세부 사항이므로 DB 레이어를 사용하는 코드는 그것에 대해 알 필요가 없습니다. –

+0

base64에서 바이너리로 디코딩하려면 무엇을 사용합니까? – ohadinho

관련 문제