2 votes

Le résultat PBKDF2 est différent dans CryptoJS et iOS

Le résultat de PBKDF2 est différent dans CryptoJS et iOS.

Voici mon code

CryptoJS

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

iOS

NSMutableData *key = [NSMutableData dataWithLength:kCCKeySizeAES256];

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

int result = CCKeyDerivationPBKDF(kCCPBKDF2,         // algorithme
                                  password.UTF8String,                // mot de passe
                                  password.length,                    // longueur du mot de passe
                                  salt.bytes,                         // sel
                                  salt.length,                        // longueur du sel
                                  kCCPRFHmacAlgSHA1,                              // PRF
                                  1000,                 // rounds
                                  key.mutableBytes,            // clé dérivée
                                  key.length);                 // longueur de la clé dérivée

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

Quelqu'un peut-il aider ? Qu'est-ce que je fais de mal?

Merci

0voto

Aman Points 26

Dans la version JavaScript de votre code, le sel doit être un objet WordArray et non une chaîne de caractères JavaScript. Fondamentalement, dans vos deux exemples, les sels sont différents et donc vous obtenez deux résultats différents.

Pour vérifier ce dont je parle, essayez le bout de code suivant dans la console JavaScript du navigateur:

saltWArray = CryptoJS.lib.WordArray.random(128/8);
saltString = saltWArray.toString(); // même sel mais au format String

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

Dans le code ci-dessus, key1 et key2 seront différents, car les sels sont intrinsèquement différents même si le contenu du sel est le même.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X