Tôi có mã sau đây hoạt động tốt trên PHP 5.5.9.mcrypt_encrypt không hoạt động đúng trên PHP 5.6.9
function index()
{
echo $this->encryptText_3des('TEST','JHHKJH9879');
}
function encryptText_3des($plainText, $key) {
$key = hash("md5", $key, TRUE);
for ($x=0;$x<8;$x++) {
$key = $key.substr($key, $x, 1);
}
$padded = $this->pkcs5_pad($plainText,
mcrypt_get_block_size(MCRYPT_3DES, MCRYPT_MODE_CBC));
$encrypted = base64_encode(mcrypt_encrypt(MCRYPT_3DES, $key, $padded, MCRYPT_MODE_CBC));
return $encrypted;
}
function pkcs5_pad ($text, $blocksize)
{
$pad = $blocksize - (strlen($text) % $blocksize);
return $text . str_repeat(chr($pad), $pad);
}
Các mã hóa đã xảy ra fine.But trong 5.6.9 thì trong doc PHP của mcrypt_encrypt, họ đề cập rằng
khoá không hợp lệ và iv kích thước không còn được chấp nhận. mcrypt_encrypt() bây giờ sẽ ném một cảnh báo và trả về FALSE nếu các đầu vào không hợp lệ. Các khóa và IV trước đây được đệm bằng các byte '\ 0' tới kích thước hợp lệ tiếp theo.
Làm cách nào để sửa đổi mã hiện tại của tôi bằng tham số thứ năm mà không thay đổi thuật toán mã hóa?
tôi đã cố gắng
$iv_size = mcrypt_get_iv_size(MCRYPT_3DES, MCRYPT_MODE_CBC);
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
và trao $ iv như tham số thứ năm.
Nhưng nó không hoạt động. Mã hóa khác với mã hóa trước đó.
Trong khi tôi đồng ý rằng một IV ngẫu nhiên nên được sử dụng, nó có thể không áp dụng đối với trường hợp Ops, bởi vì họ đã có một thư viện đầy đủ các bản mã phải tương thích. –
@ArtjomB. điểm tốt, để đảm bảo giải mã các bản mã "kế thừa", phải sử dụng iv "cũ" .. – DanFromGermany
Đảm bảo bạn cũng sử dụng 'MCRYPT_DEV_URANDOM'! –