2016-06-16 8 views
1

이 노드 코드 스 니펫은 노드 플랫폼 버전에 따라 다른 값을 반환합니다. 우분투 14.04를 실행하는 EC2에는 두 개의 동일한 인스턴스 (노드 버전 제외)가 있습니다.Node.js 암호화 PBKDF2 함수가 v8과 v10에서 다른 값을 반환합니다.

노드에서
"use strict"; 
var crypto = require("crypto"); 
crypto.pbkdf2("password", "salt", 1000, 32, function(err, derivedKey) { 
if (err) { 
console.error(err); 
} else { 
console.log(new Buffer(derivedKey).toString('base64')); 
} 
});  

v0.8.28 콘솔 값은 다음

bsKIwr7Ci8KtfsKuwp3CnhDCqgYSJANPw61Iw5A/w4vCrcKWwotWAGfChFPCnVIU

노드 v0.10.5는 값이된다

BOI + i61 + rp2eEKoGEiQDT + 1I0D/LrZaLVgBnhFOdUhQ =

Th 앱에서 노드 버전을 업그레이드하고 비밀번호를 제대로 해독 할 수 없기 때문에 큰 문제입니다.

감사합니다.

답변

3

도움을 요청한 후에 답변을 찾는 것이 이상합니다. 이 같은 버퍼 기능에 인코딩 유형을 전달하여

:

console.log(new Buffer(derivedKey,'binary').toString('base64')); 

... 나도 같은 해시를 얻을 수 있습니다.

console snippets

은 지금 지정해야합니다, 기본 유형이 UTF8로 바이너리로 변경되었습니다 그래서 '진'밝혀졌습니다. https://nodejs.org/api/crypto.html#crypto_crypto_pbkdf2_password_salt_iterations_keylen_digest_callback (하단 참고 사항 참조)