PHP- MCRYPT在加密字符串上使用什么编码?
题
使用PHP,我试图将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
功能。需要较小的数据集。
第二:相当简单明了,真的 base_convert
忽略领先的零,因此,当转换时必须将它们添加回。
其他提示
不要打扰使用BIN2BSTR和BSTR2BIN。如果您需要将字符串存储在某个地方(例如数据库),则仅在加密后base64编码/解码字符串。
$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可能会窒息数据,而无需让您知道。
不隶属于 StackOverflow