PHPで鍵ペアを作成する方法
提供: セキュリティ
スポンサーリンク
PHPでOpenSSL(php-openssl)を使用して、鍵ペア(プライベート鍵と公開鍵)の作り方を紹介します。
読み方
- 鍵ペア
- かぎ ぺあ
目次
概要
OpenSSLコマンドを用いて、鍵ペアを作成できますが、ここでは、PHPで生成する方法を説明します。 鍵長の長さを変更すると、プログラムの実行時間が変わります。
# 1024 bit php keypair.php 0.06s user 0.00s system 99% cpu 0.064 total # 2048 bit php keypair.php 0.59s user 0.00s system 99% cpu 0.593 total # 4096 bit php keypair.php 3.13s user 0.01s system 99% cpu 3.138 total
PHPの関数
resource openssl_pkey_new
resource openssl_pkey_new ([ array $configargs ] )
新しいプライベート鍵と公開鍵の鍵ペアを作成します。 引数の配列で、鍵の仕様を指定できます。
openssl_pkey_export
openssl_pkey_export ( mixed $key, string $out, [, string $passphrase [, array $configargs ]])
エクスポート可能な形式で、キー文字列を取得します。PEMエンコードした文字列を取得し、第2引数に格納します。プライベート鍵の取得に利用します。 第3引数でパスフレーズを指定できます。
openssl_pkey_get_details
array openssl_pkey_get_details ( resource $key )
キーの詳細(bits, key, type)を返します。
インストール
FreeBSDにインストールする場合
pkgコマンドでインストールする場合
sudo pkg install php55-openssl
シンプルな鍵ペアの作成
ソースコード
<?php /** * Short description for keypair.php * * @package keypair * @author kaoru <kaoru@bsd> * @version 0.1 * @copyright (C) 2014 kaoru <kaoru@bsd> */ // Create the keypair $res=openssl_pkey_new(); // Get private key openssl_pkey_export($res, $privatekey); // Get public key $publickey=openssl_pkey_get_details($res); $publickey=$publickey["key"]; echo "--- private key --- PHP_EOL; echo $privatekey, PHP_EOL; echo "--- public key --- PHP_EOL; echo $publickey, PHP_EOL; ?>
使い方
デフォルトでは、プライベート鍵は、1024bitで作成されます。
$ php keypair.php --- private key --- -----BEGIN PRIVATE KEY----- MIICeAIBADANBgkqhkiG9w0BAQEFAASCAmIwggJeAgEAAoGBAORECfP6aMmHOOIZ GQcgz0fbcLC1FvGK6oq1ml5TNKCeOg/6qlHZqte8OWvlLd3fssCTPX6Bj19MaRez msIbK+ZAOu74jmZrzdbcp5Zc9rXqPqPM+7/3a7zUt048Vz8OdBDXOxU4PgwxMH3u IaCknvoCXmGfZnTG9x6xENeriAmzAgMBAAECgYEA3ZFlj9sa57NH9b+i2ZZxXTCV /BBrSt4qt6V7R9/AD8BGX8hSlsyP1oSvwBlfIiTHH8JMSIV+I2TKBeWibJNvUWSl v81BM2X81Lg7TPDcGxj0QFsnZreuia812LusEO7K0Y6mWyZLhJTfD4SgXCOlyEvT a5F3yrJ2beaJhTcgRZECQQD6aw63H/vVjZAX6IkxYJSL4K472Boy2jFJQD83Aaga 2DK293DarhYWK4efe+WJM7mY1nBlBMnnyljHIoyPYb/HAkEA6VqTIWLS5jhxPpXG F8p2TwVlVual7KlMhIVksxMz7UqwTL2mlZHI62Gp51Y3XEhQKCE0gJNPakgINKwD v7z+tQJBAMhPMKMtM128ciGdwXg84DYPkG+QSkyZGkmU2bwfWB+5BsAyqBRUopgz U7Yv/gjE1lY6WgeEUBlYU7Feon7i2usCQQCTdd8f69kmDmjRicfiZNiaWuiNH7ee c+WcoMbfurTHsLjz5ayNO9DhnZfGTl8xe6jbkxAgZ/Z5TQeScVj1IzM5AkBYAGyO zXnulzsQvlq3y8eb0oSBweCAMTUIzV8+PzQPv8lS4ANKclH4GhhXrR4hfk1+tHxr 6V83whuIeTHLbl/l -----END PRIVATE KEY----- --- public key --- -----BEGIN PUBLIC KEY----- MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDkRAnz+mjJhzjiGRkHIM9H23Cw tRbxiuqKtZpeUzSgnjoP+qpR2arXvDlr5S3d37LAkz1+gY9fTGkXs5rCGyvmQDru +I5ma83W3KeWXPa16j6jzPu/92u81LdOPFc/DnQQ1zsVOD4MMTB97iGgpJ76Al5h n2Z0xvcesRDXq4gJswIDAQAB -----END PUBLIC KEY-----
鍵ペアの設定を変更する例
ソースコード
<?php /** * Short description for keypair.php * * @package keypair * @author kaoru <kaoru@bsd> * @version 0.1 * @copyright (C) 2014 kaoru <kaoru@bsd> */ $config = array ( "digst_alg" => "sha512", "private_key_bits" => 4096, "private_key_type" => OPENSSL_KEYTYPE_RSA, ); // Create the keypair $res=openssl_pkey_new($config); // Get private key openssl_pkey_export($res, $privatekey); // Get public key $publickey_detail=openssl_pkey_get_details($res); $publickey=$publickey_detail["key"]; echo "--- private key --- PHP_EOL; echo $privatekey, PHP_EOL; echo "--- public key --- PHP_EOL; echo $publickey, PHP_EOL; echo "--- detail --- PHP_EOL; echo $publickey_detail['bits'], PHP_EOL; echo $publickey_detail['type'], PHP_EOL; ?>
実行例
--- private key --- -----BEGIN PRIVATE KEY----- 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 iJejEtOH9NZXq5VBowqI5ppbpQM5o1oS -----END PRIVATE KEY----- --- public key --- -----BEGIN PUBLIC KEY----- MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA8kI372WvQfqhncCoShpu 2LQRW70B1hF89Z9gIzfPFvlasXqtlJy/WsASArsBKetpOIzA+o99apXWMQPdjFIq 6t4SFnyH4cVT8ANzb4wEb0eq4slquOeYmhwnTCwZT7Qu1luSTzKhTIdvMMmtSWH/ xrSEeWSG0tMWL4vAphfxCIILFjK+H+g1KXbcSzKcCfwPT7v8VG1MuBPxdBaIwffi f5IVOcEgbegT73ShnWEMeoPjtiunroGaE9dYGb2qTuYcINLW1tNqSBg91E8jXMAp uUdbCgs38kmwQfembm0nawwfvkbekqEEp+yiklK8QqQOeUKlf8QCFp6X4olFSqq7 ZRXF27ZYWkMv+CBblr/NgHEe4lyP52CSmJvuy464ZxrDr+4dWIwdKLvQhoJNv4eN VCHiCWEqrQqIP86u+CnN+RNxQQNC+q9tLH8dk7uMbq4TFXXjwauBpWRPsoB/uzjk sJ4+Hpt54tEMwA0BW6al8Tu0iEte5SksMm6qyZHfNN+001bHBPBkremMPH0GmSP7 e/NnXXd1uXC7Fl8CulgP49nzBOct7mJRsR8coyEHMqAn+2E85opX5vziIAW/vlVL vCNVqRkUPZWpZuNZ9eMtnfm8WWi9bvGHjB32d3MbHbvCPe0FKDhfWGKdSK0pcTDm IIZvrR0j6fsPqPfhkha9j18CAwEAAQ== -----END PUBLIC KEY----- --- detail --- 4096 0
関連項目
- PHPで鍵ペアを作成する方法
- PHPでの公開鍵暗号
ツイート
スポンサーリンク