2013-08-18 42 views
2

PBKDF2在CryptoJS和iOS中結果不同。PBKDF2結果在CryptoJS和iOS中有所不同

這裏是我的代碼

CryptoJS

var key= CryptoJS.PBKDF2("gf8uny", "2mnfpLsa+5I=", { keySize: 256/32, iterations: 1000 }); 
console.log(key.toString(CryptoJS.enc.Base64)); 
// console output ANepH98DqZHtMkkVrIk/CNmfykVPfEFpoax2PF8z5k8= 

的iOS

NSMutableData *key = [NSMutableData dataWithLength:kCCKeySizeAES256]; 

NSString *password = @"gf8uny"; 
NSData*salt =[NSData dataFromBase64String:@"2mnfpLsa+5I="]; 

int result = CCKeyDerivationPBKDF(kCCPBKDF2,   // algorithm 
            password.UTF8String,    // password 
            password.length,     // passwordLength 
            salt.bytes,       // salt 
            salt.length,      // saltLen 
            kCCPRFHmacAlgSHA1,        // PRF 
            1000,     // rounds 
            key.mutableBytes,   // derivedKey 
            key.length);     // derivedKeyLen 

NSString *sKey= [key base64EncodedString]; 
NSLog(@"key%@", sKey); 
// output AjHjVAwHCpF1SnNDN6ri9ms7ig88VFBPwRVRMppBgnU= 

有人能幫忙嗎?我做錯了什麼?

感謝

回答

0

在你的代碼的JavaScript版本,鹽應該是WordArray對象不是一個JavaScript字符串。基本上在你的兩個例子中,鹽是不同的,因此你得到兩個不同的結果。

爲了驗證我所講的,請嘗試以下的一段代碼在瀏覽器中的JavaScript控制檯:

saltWArray = CryptoJS.lib.WordArray.random(128/8); 
saltString = saltWArray.toString(); // same salt but in String format 

var key1 = CryptoJS.PBKDF2("password", saltWArray, { keySize: 512/32, iterations: 300 }); 
var key2 = CryptoJS.PBKDF2("password", saltString, { keySize: 512/32, iterations: 300 }); 

在上面的代碼,KEY1和KEY2會有所不同,因爲鹽是本質上的不同,即使盡管鹽含量是相同的。

相關問題