2014-09-08 3 views
1

비밀 문구가 같은 AES와 메시지가 매번 다른 값을 반환하는 이유는 무엇입니까? 각 PBKDF2 함수에 대해 동일한 염분을 가지고 있다고 가정 해 봅시다 (나쁘다는 것을 알고 있습니다). 매번 동일한 암호문을 입력한다고합시다.AES 함수가 다른 값을 반환하는 이유는 무엇입니까?

var salt = "5J07c/a7+2bf=15$56aQc75Ub55=60&0"; 
console.log(req.body.password); 
console.log(salt); 
var PBKDF2hash = crypto.PBKDF2(req.body.password, salt, { keySize: 256/32 }); 
console.log(PBKDF2hash.toString()); 
var AEScipher = crypto.AES.encrypt(req.body.password, PBKDF2hash); 
console.log(AEScipher.toString()); 

이 경우 PBKDF2hash (예상대로)가 수신되지만 AES는 언제든지 다른 칩러를 제공합니다.

zz 
5J07c/a7+2bf=15$56aQc75Ub55=60&0 
3949676666ed318087a52896be98dc80b0cad99f4b662d48565283f71a2ace80 
U2FsdGVkX19O1pqgL+V6Chk8NdiJQhf15N1uEfYXgxw= 
zz 
5J07c/a7+2bf=15$56aQc75Ub55=60&0 
3949676666ed318087a52896be98dc80b0cad99f4b662d48565283f71a2ace80 
U2FsdGVkX1/C7GAmLJvfFAHyOYj7LKZI5278/ZoeA3M= 

These 응답은 것은 소금이 differrent 및 CBC 모드 문제입니다 말한다. 제 경우 소금은 일정하며 다른 모드로 전환했습니다. 출력은 매번 여전히 다릅니다.

답변

2

CBC 모드에서 사용되는 initialization vector은 임의의 블록이므로 각 암호화가 다릅니다. IV는 메시지를 암호화 할 때 특정 IV를 사용하도록 지정할 이유가없는 것을 제외하고는 소금과 비슷합니다 (항상 임의의 IV를 사용해야합니다). IV는 종종 암호화 된 메시지의 첫 번째 블록 앞에 놓입니다.

+0

CBC, CFB, CTR, OFB, ECB. 이러한 모든 모드가 다른 암호를 반환해야합니까? – user3081123

+0

ECB는 의미 론적 보안을 제공하지 않으므로 ECB는 사용하지 않지만 거의 항상 잘못된 모드입니다. 평문 메시지의 블록이 반복되면 암호문의 해당 블록이 반복됩니다. (평범한 사람에 대한 정보가 보이는 사람에게 누설 됨). http://en.wikipedia.org/wiki/Block_cipher_mode_of_operation을 참조하십시오. –

+0

감사합니다. – user3081123

관련 문제