PHP AES шифрование PKCS5Padding
Я не PHP-кодер, поэтому мне нужна небольшая помощь с шифрованием PHP AES.
Я пишу код, где я шифрую файлы изображений на PHP, а затем расшифровываю их на Java (Android). Все работает нормально, когда я шифрую / расшифровываю PNG-файлы, но когда я пытаюсь сделать то же самое с JPG, расшифровка Java выдает исключение:
WARN/System.err(345): java.io.IOException: data not block size aligned
основываясь на поиске в интернете, кажется, что это потому, что я не делаю заполнение должным образом.
Как я могу это сделать правильно?
вот код PHP для шифрования:
<?php
$secret_key = "01234567890abcde";
$iv = "fedcba9876543210";
$infile = "5.png";
$outfile = "5_encrypted.png";
$crypttext = file_get_contents($infile);
$plaintext = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $secret_key, $crypttext, MCRYPT_MODE_CBC, $iv);
header('Content-Type: application/octet-stream');
header('Content-Length: ' . strlen($plaintext));
header('Content-Disposition: attachment; filename=' . ($outfile));
echo $plaintext;
//file_put_contents($outfile,$plaintext);
//save the file in the folder of server
1 ответов
следующий пример для PKCS5Padding происходит из комментариев к mcrypt документы.
<?php
function encrypt_something($input)
{
$size = mcrypt_get_block_size('des', 'ecb');
$input = pkcs5_pad($input, $size);
$key = 'YOUR SECRET KEY HERE';
$td = mcrypt_module_open('des', '', 'ecb', '');
$iv = mcrypt_create_iv (mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
mcrypt_generic_init($td, $key, $iv);
$data = mcrypt_generic($td, $input);
mcrypt_generic_deinit($td);
mcrypt_module_close($td);
$data = base64_encode($data);
return $data;
}
function pkcs5_pad ($text, $blocksize)
{
$pad = $blocksize - (strlen($text) % $blocksize);
return $text . str_repeat(chr($pad), $pad);
}
function pkcs5_unpad($text)
{
$pad = ord($text{strlen($text)-1});
if ($pad > strlen($text)) return false;
if (strspn($text, chr($pad), strlen($text) - $pad) != $pad) return false;
return substr($text, 0, -1 * $pad);
}