【问题标题】:PHP AES encryption PKCS5PaddingPHP AES 加密 PKCS5Padding
【发布时间】:2011-10-19 19:59:03
【问题描述】:

我不是 PHP 编码员,所以我需要一些 PHP AES 加密方面的帮助。

我正在编写代码,我在 PHP 中加密图像文件,然后在 Java (Android) 中解密它们。当我加密/解密 PNG 文件时一切正常,但是当我尝试对 JPG 执行相同操作时,Java 解密会引发异常:

WARN/System.err(345): java.io.IOException: data not block size aligned

根据网上搜索,似乎这是因为我没有正确地做padding。

我怎样才能正确地做到这一点?

这里是用于加密的 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

【问题讨论】:

    标签: php encryption aes padding


    【解决方案1】:

    以下 PKCS5Padding 示例来自 cmets 到 mcrypt docs

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-11-16
      • 2017-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-05
      相关资源
      最近更新 更多