¿Es un codificador seguro y hasher?

-1

Quiero preguntar si mi código es seguro o no. Si esto no es seguro por favor dime la razón. Este código se mezcla de Rjindael-256, base64_encode y SHA-512.

function xencoder($input,$key) {
    $salt = 'Q(i1V7X,k&_Ydk@8T5punQdL@S+Ih&kY6swz:)wg6n5!yOQ*q5iDtm^b49J#XTHB';
    $key = substr(hash('sha512', base64_encode($key.$salt)), 0, 32);
    $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB);
    $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
    $output = base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $input, MCRYPT_MODE_ECB, $iv));
    return $output;
}

function xdecoder($input,$key) {
   $salt = 'Q(i1V7X,k&_Ydk@8T5punQdL@S+Ih&kY6swz:)wg6n5!yOQ*q5iDtm^b49J#XTHB';
   $key = substr(hash('sha512', base64_encode($key.$salt)), 0, 32);
   $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB);
   $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
   $output = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $key, base64_decode($input), MCRYPT_MODE_ECB, $iv);
   return $output;
}

function xhasher($input,$key) {
    $output = strtoupper(hash('sha512',xencoder($input,$key)));
    $output = substr($output,0,36);
    $output = "^XH".$output."^";
    return $output;
}

Por ejemplo, llamo a xhasher para cambiar la contraseña xhasher ("mypassword", "AUTH_PASSWORD") la salida será ^XH9586C75B1A098D3ACF97C6581E0CCB0C8CF8^

    
pregunta dharaninja 01.05.2015 - 02:02
fuente

2 respuestas

1

Estás usando el modo ECB, está roto. Podrías reemplazarlo con CBC.

Reduce la clave a la mitad de la fuerza al componer una clave de solo caracteres hexadecimales.

El vector de inicialización no hace nada en su código debido al modo ECB.

Si realmente tuvieras un vector de inicialización, deberías enviarlo junto con el mensaje cifrado y usarlo para el descifrado.

Su esquema carece de autenticación de mensajes, lo que lo hace maleable y, por lo tanto, vulnerable a algunos ataques sutiles.

Usted insinúa que xhasher es un esquema de hashing de contraseñas, para esto carece de un mecanismo de fortalecimiento clave. Y la forma en que lo usas, carece de sal. (El $salt en su código es en realidad un punto en el hashing de la contraseña).

    
respondido por el aaaaaaaaaaaa 02.05.2015 - 14:50
fuente
0

No es cierto que utilice una sal estática, la sal debe ser un número aleatorio con una longitud fija para cada entrada.

    
respondido por el Ali 02.05.2015 - 07:12
fuente

Lea otras preguntas en las etiquetas