Estaba probando rc4-40
con una clave de 200 bits (25 bytes) y, para mi sorpresa, los resultados fueron los mismos que con rc4
:
<?php
$key_size = 25;
$key = '';
for ($i = 0; $i < $key_size; $i++) {
$key.= chr(mt_rand(0, 255));
}
$a = openssl_encrypt(str_repeat('z', 50), 'rc4-40', $key, OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING);
$b = openssl_encrypt(str_repeat('z', 50), 'rc4', $key, OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING);
echo $a == $b ? 'good' : 'bad';
Fuente: enlace
Según mi entendimiento, basado en publicaciones como RC4 no funciona correctamente con el comando openssl? , que rc4-40
solo admite claves de 40 bits y rc4
solo admite claves de 128 bits. Pero aquí tenemos a ambos aparentemente soportando una clave de 200 bits.
Incluso enlace da la idea de que rc4-40
se fija en 40 bits y rc4
se fija en 128 bits (ambos parecen ser refutados por el código anterior):
rc4 128 bit RC4
rc4-64 64 bit RC4
rc4-40 40 bit RC4
Incluso si rc4
, en este ejemplo, simplemente truncó las claves que eran largas a 128 bits y rc4-40
truncadas por más tiempo que las claves admitidas a 40 bits, todavía es lógico pensar que los resultados serían diferentes, pero no lo son.
Entonces, ¿por qué toda la literatura en línea implica que tienen una longitud fija cuando mis propias pruebas sugieren que no?