[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 メーリングリストの案内