cryptojs: Cómo generar AES frase de contraseña

Quiero generar una contraseña de 256 bits para mi el cifrado AES. Cuando reviso la contraseña después de que el cifrado es diferente de la de mi contraseña inicial. ¿Qué estoy haciendo mal? O hay algún mecanismo de seguridad que yo no soy consciente de que?

Mi código:

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 salida, es decir,

0b05308c9a00f07044416bad7a51bacd282fc5c0c999551a4ff15c302b268b20
4df875993770411044fb35953166ee7833c32ca0741e9fec091dfa10138039e8

Es esto normal o estoy haciendo algo mal aquí?
Gracias por la ayuda!

  • Math.floor(Math.random() * 16) no es equivalente a chance.integer({min: 0, max: 15}). Usted debe tratar de Math.round(Math.random() * 15)
InformationsquelleAutor Yaron | 2014-04-05

2 Kommentare

  1. 14

    El cifrado se realiza con una clave, que es un conjunto de bits binarios, no una contraseña, lo que implica una cadena legible.

    Para ir de una contraseña de una clave, uno puede usar una Contraseña de Claves Basada en la Derivación de la Función, tales como PBKDF2. Crypto-JS ya tiene un PBKDF2 función incorporada, es decir,

    <script src="http://crypto-js.googlecode.com/svn/tags/3.1.2/build/rollups/pbkdf2.js"></script>
    <script>
        var salt = CryptoJS.lib.WordArray.random(128/8);
    
        var key128Bits = CryptoJS.PBKDF2("Secret Passphrase", salt, { keySize: 128/32 });
        var key256Bits = CryptoJS.PBKDF2("Secret Passphrase", salt, { keySize: 256/32 });
        var key512Bits = CryptoJS.PBKDF2("Secret Passphrase", salt, { keySize: 512/32 });
    
        var key512Bits1000Iterations = CryptoJS.PBKDF2("Secret Passphrase", salt, { keySize: 512/32, iterations: 1000 });
    </script>
    

    En general, el uso de tan alto número de iteraciones como usted puede conseguir lejos con.

    Sal debe ser un valor aleatorio, como en el ejemplo anterior; necesitará, por supuesto, para almacenar el valor junto con el número de iteraciones para obtener la misma clave, la misma frase de contraseña.

    • ¿Qué hago si no necesita una frase contraseña en todos? Yo sólo quiero para generar la clave y guardarlo en algún lugar. O es la solución de la generación de una frase de uso de mi generate_key(), analizar a una clave y, a continuación, utilizar el cifrado aes?
    • A continuación, se podría generar la clave con las mismas técnicas que de otra manera usar para generar la sal y el IV, es decir, un sistema de encriptación de la biblioteca al azar. En este ejemplo, tendría que utilizar CryptoJS.lib.WordArray.al azar de la clave y el IV.
    • Wow, lo que se masturba el CryptoJS los desarrolladores fueron para especificar PBKDF2 el tamaño de la clave de 32 bits de las palabras!
    • El ENLACE está ROTO!
  2. 1

    He encontrado la solución. Usted puede definir su propia clave con
    var cifrado = CryptoJS.AES.cifrar(«Mensaje», clave, { iv: iv });

    Así que mi código es:

    key=CryptoJS.enc.Hex.parse(Generate_key());
    iv=CryptoJS.enc.Hex.parse(Generate_key());
    var encrypted = CryptoJS.AES.encrypt("Message", key, { iv: iv });
    
    • cómo se genera la clave?
    • En la pregunta

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea