Pregunta

Usando PHP, estoy tratando de convertir el texto de cifrado generado por McRypt en binario, pero cuando trato de convertirlo en el texto de cifrado, no se convierte correctamente, por lo que no se puede descifrar. Supongo que mis codificaciones se están equivocando en algún lugar, pero no sé dónde comenzar a resolverlo. Aquí hay un enlace al sitio http://dev.hersha.me/str2bin.php Y aquí está mi código.

<?php

class phpSteg {

function bin2bstr($input) {
    if (!is_string($input)) return null;
    return pack('H*', base_convert($input, 2, 16)); 
}

function bstr2bin($input) {
    if (!is_string($input)) return null;
    $value = unpack('H*', $input);
    return base_convert($value[1], 16, 2);
}


};

$steg = new phpSteg();

//echo $steg->bstr2bin('OMG') . "\n <br \>";
//echo $steg->bin2bstr('010011110100110101000111') . "\n <br \>";
$hash =  hash('md5',"OMGZWTF");
echo $hash . "\n <br \>";
$message = "OMG WTF BBQ";

$text = $message;
$key = $hash;

$iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_CFB), MCRYPT_RAND);
echo $iv . "\n <br \>";
$encrypted = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $text, MCRYPT_MODE_CFB, $iv);

$binenc = $steg->bstr2bin($encrypted);

$bstrenc = $steg->bin2bstr($binenc);


$decrypted = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $key, $bstrenc, MCRYPT_MODE_CFB, $iv);
echo "Cipher Text : " . $encrypted . "\n <br \>";

echo "Cipher Text (binary) : " . $binenc . "\n <br \>";

echo "Cipher Text (back from binary) : " . $bstrenc . "\n <br \>";

echo "Decryption : " . $decrypted; // The quick brown fox jumps over the lazy dog

?>

¿Algunas ideas?

¿Fue útil?

Solución 3

Todos los problemas resueltos.

Primero: estaba sobrecargando el base_convert función. Necesito conjunto de datos más pequeño.

Segundo: bastante simple y obvio realmente, base_convert ignora los ceros principales, por lo que cuando la conversión tuvo que agregarlos de nuevo.

Otros consejos

No se moleste en usar Bin2bStr y BSTR2Bin. Si necesita almacenar la cadena en algún lugar (como una base de datos), solo Base64 Codifique/decodifique la cadena después del cifrado.

$encrypted = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $text, MCRYPT_MODE_CFB, $iv);

$binenc = base64_encode($encrypted);

$bstrenc = base64_decode($binenc);

$decrypted = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $key, $bstrenc, MCRYPT_MODE_CFB, $iv);

Probar base64_encode en su cadena binaria antes de encriptar y usar base64_decode Después de que se descifró. McRypt podría estar ahogando en los datos de lo contrario, sin hacerlo saberlo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top