Frage

Mit PHP versuche ich, den von McRypt in Binary generierten Chiffre -Text zu konvertieren, aber wenn ich versuche, ihn wieder in den Chiffre -Text umzuwandeln, wird er nicht richtig konvertiert, sodass es nicht entschlüsselt werden kann. Ich gehe davon aus, dass meine Codierungen irgendwo durcheinander geraten, aber ich weiß nicht, wo ich anfangen soll, es herauszufinden. Hier ist ein Link zur Website http://dev.hersha.me/str2bin.php Und hier ist mein Code.

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

?>

Irgendwelche Ideen?

War es hilfreich?

Lösung 3

Alle Probleme gelöst.

Erstens: Ich habe das überladen base_convert Funktion. Benötiger kleinerer Datensatz.

Zweitens: ziemlich einfach und offensichtlich wirklich, base_convert Ignoriert führende Nullen, also musste man beim Konvertieren sie zurück hinzufügen.

Andere Tipps

Machen Sie sich nicht die Mühe, Bin2bstr und BSTR2BIN zu verwenden. Wenn Sie die Zeichenfolge irgendwo (wie eine Datenbank) speichern müssen, base 64 die Zeichenfolge nach der Verschlüsselung.

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

Versuchen Basis64_CODE auf Ihrer binären Zeichenfolge vor dem Verschlingen und verwenden Sie Base64_Decode Nachdem es entschlüsselt ist. McRypt könnte ansonsten die Daten ersticken, ohne Sie wissen zu lassen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top