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); 
}