У меня есть код шифрования, который отлично работает. Чтобы сделать это немного подлогом, я хотел настроить массив байтов после его зашифрования и не изменять его с другой стороны перед расшифровкой. Таким образом, если кто-то получит ключ шифрования, возможно, они не поймут, почему он не работает.
Однако всякий раз, когда я манипулирую байтами, он ломает вещи, что для меня означает, что я неправильно редактирую массив байтов строк. Вот моя реализация, как предложено ниже. Он выполняет шифрование и дешифрование непосредственно друг за другом для целей тестирования.
$string = "My Test String"; $size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_CBC); $iv = mcrypt_create_iv($size, MCRYPT_RAND); $key = pack('H*', encryptKey()); $result = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, addpadding($string), MCRYPT_MODE_CBC, $iv); $ordVal = ord($result[5]); if($ordVal == 0) { $ordVal = 255; } else { $ordVal--; } //$result[5] = $ordVal; $data = base64_encode($iv . $result); $str = base64_decode($data); if(!str) { dieEncrypted("Unable to base64 decode string"); } $ivSize = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_CBC); $iv = substr($str,0,$ivSize); $str = substr($str,$ivSize); $ordVal = ord($str[5]); if($ordVal == 255) { $ordVal = 0; } else { $ordVal++; } //$str[5] = $ordVal; $key = pack('H*', encryptKey()); $result = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $key, $str, MCRYPT_MODE_CBC, $iv); if(!$result) { dieEncrypted("Unable to unencrypt string"); } $result = strippadding($result); echo "The result is: $result|";