PHP-暗号化された文字列でMcRyptはどのようなエンコードを使用しますか?

StackOverflow https://stackoverflow.com/questions/2174651

  •  24-09-2019
  •  | 
  •  

質問

PHPを使用して、McRyptによって生成された暗号テキストをMcRyptにバイナリに変換しようとしていますが、暗号テキストに戻そうとすると、適切に変換されないため、復号化できません。私は自分のエンコーディングがどこかで台無しにされていると思っていますが、どこからそれを理解するべきかわかりません。これがサイトへのリンクです http://dev.hersha.me/str2bin.php そして、これが私のコードです。

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

?>

何か案は?

役に立ちましたか?

解決 3

すべての問題が解決しました。

最初:私は過負荷になっていた base_convert 関数。より小さなデータセットが必要でした。

2番目:むしろシンプルで明白です、 base_convert 主要なゼロを無視するので、変換時にそれらを追加する必要がありました。

他のヒント

bin2bstrとbstr2binを使用しないでください。文字列をどこかに(データベースのように)どこかに保存する必要がある場合は、暗号化後に文字列をエンコード/デコードするだけです。

$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 暗号化する前のバイナリ文字列で使用します base64_decode 復号化された後。 McRyptは、それ以外の場合はデータを窒息させている可能性があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top