cryptojs: Comment générer des AES phrase de passe
Je veux générer un 256bit mot de passe pour mon chiffrement AES. Quand je vérifie le mot de passe après le cryptage, c'est différent de mon mot de passe initial. Ce que je fais mal? Ou est-il un mécanisme de sécurité, je ne suis pas au courant?
Mon code:
password=Generate_key();
var encrypted = CryptoJS.AES.encrypt("Message", password);
//Those two should be the same
document.write(password+"<br>");
document.write(encrypted.key);
function Generate_key() {
var key = "";
var hex = "0123456789abcdef";
for (i = 0; i < 64; i++) {
key += hex.charAt(Math.floor(Math.random() * 16));
//Initially this was charAt(chance.integer({min: 0, max: 15}));
}
return key;
}
La sortie est c'est à dire
0b05308c9a00f07044416bad7a51bacd282fc5c0c999551a4ff15c302b268b20
4df875993770411044fb35953166ee7833c32ca0741e9fec091dfa10138039e8
Est-ce normal ou suis-je en train de faire quelque chose de mal ici?
Merci pour l'aide!
Math.floor(Math.random() * 16)
n'est pas équivalent à chance.integer({min: 0, max: 15})
. Vous devriez essayer Math.round(Math.random() * 15)
OriginalL'auteur Yaron | 2014-04-05
Vous devez vous connecter pour publier un commentaire.
Le chiffrement est fait avec une clé, qui est un ensemble de bits binaires, pas un mot de passe, ce qui implique une chaîne explicite.
Pour aller d'un mot de passe à une touche, on peut utiliser un Mot de passe Basé Fonction de Dérivation de Clé, tels que PBKDF2. Crypto-JS a déjà un PBKDF2 fonction intégrée, c'est à dire
En général, la consommation d'un nombre d'itérations que vous pouvez sortir avec.
Sel doit être une valeur aléatoire, comme dans l'exemple ci-dessus; vous en aurez besoin, bien sûr, de stocker cette valeur avec le nombre d'itérations pour obtenir la même clé donné le même mot de passe.
Ensuite, vous générez la clé avec les mêmes techniques que vous auriez à utiliser pour générer le sel et le IV, c'est à dire un niveau de chiffrement aléatoire de la bibliothèque. Dans cet exemple, vous pouvez utiliser CryptoJS.lib.WordArray.aléatoire pour à la fois la clé et le IV.
Wow, quelle secousses du CryptoJS les développeurs de spécifier
PBKDF2
la taille de la clé de 32 bits des mots!Le LIEN est ROMPU!
OriginalL'auteur Anti-weakpasswords
J'ai trouvé la solution. Vous pouvez définir votre propre clé à l'aide de
var crypté = CryptoJS.AES.chiffrer("Message", à la clé, { iv: iv });
Donc mon code source est:
OriginalL'auteur Yaron