在php 5.2版本中,openssl这个扩展的应用非常广泛,它提供了安全的加密通信协议和数据加密处理功能,也可以用于创建和验证数字证书,具有广泛用途和灵活性。比如:
//从字符串中生成一对公私钥$config = array("private_key_bits" =>1024,"private_key_type" =>OPENSSL_KEYTYPE_RSA,);$res = openssl_pkey_new($config);openssl_pkey_export($res, $privkey);$pubkey = openssl_pkey_get_details($res);$pubkey = $pubkey["key"];//进行数据的加密和解密等操作$data = "hello openssl";$encrypted = '';$decrypted = '';//加密openssl_private_encrypt($data, $encrypted, $privkey, OPENSSL_PKCS1_PADDING);//解密openssl_public_decrypt($encrypted, $decrypted, $pubkey, OPENSSL_PKCS1_PADDING);echo $decrypted; // "hello openssl"
openssl扩展提供了很多简单易用的加密和解密函数,比如使用openssl_encrypt函数可以方便地对数据进行加密,示例代码如下:
$data = "hello openssl";$password = "password";$method = "aes-128-cbc";$iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length($method));$encrypted = openssl_encrypt($data, $method, $password, 0, $iv);$decrypted = openssl_decrypt($encrypted, $method, $password, 0, $iv);echo $decrypted; //"hello openssl"
在网站开发中,我们有时会使用到ssl证书,用于实现https加密传输和验证网站身份等操作。使用openssl扩展中的函数可以快速创建和验证数字证书,比如:
//生成自签名证书$dn = array("countryName" =>"CN","stateOrProvinceName" =>"Beijing","localityName" =>"Haidian","organizationName" =>"PHP","commonName" =>"localhost",);$privkey = openssl_pkey_new();$cert = openssl_csr_new($dn, $privkey);$cert = openssl_csr_sign($cert, null, $privkey, 365);openssl_x509_export($cert, $certout);//验证数字证书是否合法$x509 = openssl_x509_read($certout);$cinfo = openssl_x509_parse($x509);if ($cinfo) {echo "证书信息\n";echo "=================================\n";echo "公共名称: " . $cinfo["subject"]["CN"] . "\n";echo "颁发者: " . $cinfo["issuer"]["CN"] . "\n";echo "有效期开始时间: " . date("Y-m-d H:i:s", $cinfo["validFrom_time_t"]) . "\n";echo "有效期截止时间: " . date("Y-m-d H:i:s", $cinfo["validTo_time_t"]) . "\n";echo "=================================\n";}
除了以上应用,openssl扩展还可以用于数字签名、哈希处理、随机数生成等操作,非常方便实用。