Question

En utilisant PHP, je suis en train de convertir le texte chiffré généré par mcrypt en binaire, mais quand je tente de reconvertir le texte chiffré il ne marche pas se reconvertir proprement il ne peut pas être déchiffré. Je suppose que mes encodages sont se foiré quelque part, mais je ne sais pas où commencer à comprendre. Voici un lien vers le site http://dev.hersha.me/str2bin.php et mon code ici.

<?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

?>

Toutes les idées?

Était-ce utile?

La solution 3

Tous les problèmes résolus.

D'abord: je SURCHARGE la fonction base_convert. Nécessaire plus petit ensemble de données.

Deuxième:. Plutôt très simple et évidente, base_convert ne tient pas compte des zéros, donc quand la conversion a dû les ajouter

Autres conseils

Ne pas déranger l'aide bin2bstr et bstr2bin. Si vous avez besoin de stocker la chaîne quelque part (comme une base de données) encode juste base64 / décoder la chaîne après le chiffrement.

$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);

base64_encode sur votre chaîne binaire avant de le chiffrer, et utiliser base64_decode après sa déchiffré. Mcrypt pourrait être étouffait sur les données autrement, sans vous laisser savoir.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top