Estoy buscando un simple, pero sólidamente PHP implementación de AES mediante Mcrypt.

Con la esperanza de que se reducen a un simple par de funciones, $garble = encrypt($key, $payload) y $payload = decrypt($key, $garble).

Una vez que tengo esta en orden, yo también voy a ser muy interesados para lograr una compatible con JavaScript de la aplicación.
Hay un par de implementaciones de php/js: 2011/08/juego-php-y-js-cifrado. También, aes-php.html
PHP/JavaScript combo suena como un caso de uso típico para TLS (SSL sucesor) / HTTPS.
Tengo una clase he estado jugando con el here. No estoy sugiriendo que es bueno para usar (por lo tanto, estar en codereview), pero puede ser fuente de inspiración
tengo una clase similar, pero utiliza ‘twofish’. me pueden hacer algunas comparaciones con su clase. una diferencia inmediata es que yo uso GUID para crear un sitio de referencia’. También, uniqid() está muy bien para ‘sales’.

OriginalEl autor ChaseMoskal | 2014-05-10

4 Comentarios

  1. 10

    Estoy recientemente aprender acerca de este tema, y estoy publicando esta respuesta como una wiki de la comunidad para compartir mi conocimiento, para ser corregido.

    Es mi entendimiento de que AES se puede lograr utilizando Mcrypt con las siguientes constantes como opciones:

    MCRYPT_RIJNDAEL_128     //as cipher
    MCRYPT_MODE_CBC         //as mode
    MCRYPT_MODE_DEV_URANDOM //as random source (for IV)

    Durante la codificación, un estudio aleatorizado de no-secreto vector de inicialización (IV) debe ser utilizado de forma aleatoria a cada uno de cifrado (por lo que el mismo nunca se obtiene la misma garble). Este IV debe ser conectado a la encriptación de resultados con el fin de ser utilizados más tarde, durante el descifrado.

    Resultados deben ser codificada en Base 64 para la compatibilidad simple.

    Aplicación:

    <?php
    
    define('IV_SIZE', mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC));
    
    function encrypt ($key, $payload) {
      $iv = mcrypt_create_iv(IV_SIZE, MCRYPT_DEV_URANDOM);
      $crypt = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $payload, MCRYPT_MODE_CBC, $iv);
      $combo = $iv . $crypt;
      $garble = base64_encode($iv . $crypt);
      return $garble;
    }
    
    function decrypt ($key, $garble) {
      $combo = base64_decode($garble);
      $iv = substr($combo, 0, IV_SIZE);
      $crypt = substr($combo, IV_SIZE, strlen($combo));
      $payload = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, $crypt, MCRYPT_MODE_CBC, $iv);
      return $payload;
    }
    
    
    //:::::::::::: TESTING ::::::::::::
    
    
    $key = "secret-key-is-secret";
    $payload = "In 1435 the abbey came into conflict with the townspeople of Bamberg and was plundered.";
    
    //ENCRYPTION
    $garble = encrypt($key, $payload);
    
    //DECRYPTION
    $end_result = decrypt($key, $garble);
    
    //Outputting Results
    echo "Encrypted: ", var_dump($garble), "<br/><br/>";
    echo "Decrypted: ", var_dump($end_result);
    
    ?>

    De salida se parece a esto:

    Encrypted: string(152) "4dZcfPgS9DRldq+2pzvi7oAth/baXQOrMmt42la06ZkcmdQATG8mfO+t233MyUXSPYyjnmFMLwwHxpYiDmxvkKvRjLc0qPFfuIG1VrVon5EFxXEFqY6dZnApeE2sRKd2iv8m+DiiiykXBZ+LtRMUCw==" 
    
    Decrypted: string(96) "In 1435 the abbey came into conflict with the townspeople of Bamberg and was plundered."
    Podrías indicar qué parte de esto es diferente de la de PHP de código de ejemplo en mcrypt_encrypt?
    Bien, aquí estamos definiendo un par de sencillos, reutilizables funciones. Aquí, MCRYPT_DEV_URANDOM se utiliza como una vía INTRAVENOSA en lugar de MCRYPT_RAND (que supuestamente es mejor). Todavía estoy tratando de determinar si es importante hash de las claves, y tal vez incluso la sal. También me gustaría hacer este inter-operable con un común AES biblioteca de JavaScript, aunque no estoy seguro y no lo he elegido.
    MCRYPT_DEV_URANDOM es – en mi opción mejor que MCRYPT_RANDOM así que está bien, sobre todo para un IV. La clave debe ser generado aleatoriamente (uso hexadecimal como en el ejemplo). Si desea utilizar una contraseña, usted tendrá que agregar un PBKDF como bcrypt a la mezcla; una contraseña no es fundamental. No hay tal cosa como una «AES» de la biblioteca. JavaScript cifrado en el navegador es la disputa de la tecnología para decir lo menos.
    Tenga en cuenta que no parece ser un PHP puerto de RNCryptor sin embargo.
    Me doy cuenta de que estamos en lo correcto, y debo sal-hash de las contraseñas en las teclas. Voy a añadir esto pronto, después de que me imagino que la mejor manera de bcrypt este. password_hash() de PHP 5.5+ se ve muy bien, pero no sé si hay otra forma conveniente de hacer esto para versiones anteriores de PHP. Probablemente la actualización de esta mañana. Gracias!

    OriginalEl autor

  2. 1

    Agregar la función de limpiar los caracteres de control (�).

    function clean($string) {
    return preg_replace('/[\x00-\x09\x0B\x0C\x0E-\x1F\x7F]/', '', $string);

    }

    echo "Decrypted: ", clean($end_result);

    Sentrapedagang.com

    OriginalEl autor Dewa Putra

  3. 0

    Simple y Usable:

    $text= 'Hi, i am sentence';
    $secret = 'RaNDoM [email protected]#$%%^';
    
    $encrypted = simple_encrypt($text,           $secret);
    $decrypted = simple_decrypt($encrypted_text, $secret);

    códigos:

    function simple_encrypt($text_to_encrypt, $salt)    { 
        return trim(base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_128,  pack('H*', $salt), $text_to_encrypt, MCRYPT_MODE_CBC, $iv =  mcrypt_create_iv($iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC), MCRYPT_RAND))));
    }
    
    function simple_decrypt($encrypted, $salt)  { 
        return trim(mcrypt_decrypt(MCRYPT_RIJNDAEL_128, pack('H*', $salt), base64_decode($encrypted), MCRYPT_MODE_CBC, $iv = mcrypt_create_iv($iv_size=mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC), MCRYPT_RAND))); 
    }

    OriginalEl autor T.Todua

  4. 0

    Clase Mycrypt

    Trate de usar esta clase. Aquí. Todo lo que necesitas para pasar es clave y cuerda.

    class MCrypt
    {
        const iv = 'fedcba9876543210';
    
        /**
     * @param string $str
     * @param bool $isBinary whether to encrypt as binary or not. Default is: false
     * @return string Encrypted data
     */
    public static function encrypt($str, $key="0123456789abcdef", $isBinary = false)
    {
        $iv = self::iv;
        $str = $isBinary ? $str : utf8_decode($str);
        $td = mcrypt_module_open('rijndael-128', ' ', 'cbc', $iv);
        mcrypt_generic_init($td, $key, $iv);
        $encrypted = mcrypt_generic($td, $str);
        mcrypt_generic_deinit($td);
        mcrypt_module_close($td);
        return $isBinary ? $encrypted : bin2hex($encrypted);
    }
    
    /**
     * @param string $code
     * @param bool $isBinary whether to decrypt as binary or not. Default is: false
     * @return string Decrypted data
     */
    public static function decrypt($code, $key="0123456789abcdef", $isBinary = false)
    {
        $code = $isBinary ? $code : self::hex2bin($code);
        $iv = self::iv;
        $td = mcrypt_module_open('rijndael-128', ' ', 'cbc', $iv);
        mcrypt_generic_init($td, $key, $iv);
        $decrypted = mdecrypt_generic($td, $code);
        mcrypt_generic_deinit($td);
        mcrypt_module_close($td);
        return $isBinary ? trim($decrypted) : utf8_encode(trim($decrypted));
    }
    
    private static function hex2bin($hexdata)
    {
        $bindata = '';
        for ($i = 0; $i < strlen($hexdata); $i += 2) {
            $bindata .= chr(hexdec(substr($hexdata, $i, 2)));
        }
        return $bindata;
    }
       }

    Cómo Utilizar

     $var = json_encode(['name'=>['Savatar', 'Flash']]);
     $encrypted = MCrypt::encrypt();
     $decrypted = MCrypt::decrypt($encrypted);
    No veo la relevancia de cambiar la codificación de caracteres de los datos cifrados. ¿Qué pasa si quiero cifrar mi poema que hace, digamos, ruso, chino y hebreo rima juntos? Siento que usted debe salir de su contexto específico de codificación de caracteres manejo fuera del ámbito de aplicación de la criptografía.

    OriginalEl autor Abhijit Srivastava

Dejar respuesta

Please enter your comment!
Please enter your name here