[PHP-users 35574] mcrypt_decrypt() が正しく複合化できない

youo hoko yoko00068 @ yahoo.co.jp
2011年 5月 26日 (木) 17:35:06 JST


星野と申します

mcrypt以外(openssl_*系関数等)でAES256 ECBで暗号化したデータを
PHPの mcrypt_*系関数で復号出来ないようです。

サンプルコード
---
<?php
    $key = 'secret key' ;
    $data = 'abcd1234' ;
    $data_enc = openssl_encrypt($data,'aes-256-ecb',$key,TRUE) ;

    echo "openssl:" , openssl_decrypt($data_enc,'aes-256-ecb',$key,TRUE),"\n" ;
    echo "mcrypt :" , mcrypt_decrypt('rijndael-256',$key,$data_enc,'ecb') ,"\n" ;
?>
---
結果
> openssl:abcd1234
> mcrypt :[バイナリになってしまい表示不能]

openssl_decrypt()とmcrypt_decrypt()の結果が違ってしまってます。

その他試したこと

・PHPのmcryptで暗号化したものはPHPのmcryptで復号できる
・PHPのopensslで暗号化したものはPerlのCrypt::Rijndaelで復号できる
・PerlのCrypt::Rijndaelで暗号化したものはPHPのmcryptで復号できない
・mcrypt_module_open() から使っても同じ結果です

PHPのmcryptがおかしいように思います
というかlibmcryptがおかしいということでしょうか

PHPのPKCS#5パディングがjava等と違うという問題もあるようですが、
パディング除去は複合化後の処理なので、関係ないと思います。

環境
# php -v
> PHP 5.3.0 (cli) (built: Nov  2 2009 05:23:58)
> Copyright (c) 1997-2009 The PHP Group
> Zend Engine v2.3.0, Copyright (c) 1998-2009 Zend Technologies

# uname -a
> Linux web2 2.6.18-164.6.1.el5 #1 SMP Tue Nov 3 16:12:36 EST 2009 x86_64 x86_64 x86_64 GNU/Linux

# cat /etc/issue | head -1
> CentOS release 5.4 (Final)

# rpm -qa | grep mcrypt
> libmcrypt-2.5.8-4.el5.centos
> libmcrypt-devel-2.5.8-4.el5.centos


PHP-users メーリングリストの案内