PHP で OpenSSL 関数を使って DSA 公開鍵での暗号化を行おうとしたところ
Warning: openssl_public_encrypt(): key type not supported in this PHP build!
のようにエラーがでてしまった。
PHP のソースを追ってみたところ、どうやら PHP では現在のところ DSA の秘密鍵/公開鍵についてはサポートされていないようです。
php-5.2.1/ext/openssl/openssl.c:
PHP_FUNCTION(openssl_public_encrypt)
{
// ** 省略 **
switch (pkey->type) {
case EVP_PKEY_RSA:
case EVP_PKEY_RSA2:
successful = (RSA_public_encrypt(data_len,
(unsigned char *)data,
cryptedbuf,
pkey->pkey.rsa,
padding) == cryptedlen);
break;
default:
php_error_docref(NULL TSRMLS_CC, E_WARNING, “key type no
t supported in this PHP build!”);}
// ** 以下略 **
のように、
openssl_open(), openssl_seal(), openssl_private_decrypt(), openssl_private_encrypt(), openssl_public_encrypt(), openssl_public_decrypt()
など、暗号化/復号化を行う関数では RSA か RSA2 の時の処理しか実装されていないようです。
参考:
– OpenSSL 関数(php.net)