我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...

本文继续讲述openssl的代码应用,在前面的文章中,苏南大叔用命令行运行openssl的方式,创建了一组RSA的密钥。其实,openssl作为php扩展使用的时候,也可以使用代码的方式,创建一组RSA密钥。那么,在本文中,苏南大叔就继续这个话题,演示一下,在php中,创建RSA密钥对儿的方式方法。

苏南大叔:php如何利用openssl快速生成一组RSA钥匙对(私钥/公钥)? - php-openssl-rsa
php如何利用openssl快速生成一组RSA钥匙对(私钥/公钥)?(图2-1)

本文测试环境:centos/openssl/php72。本文正确运行的前提是:php启用了libssl.so扩展,所以,如果发生了错误,请先确认是否启用了相关扩展。

RSA密钥对儿基本配置

这里有个字节数的概念,一般选择1024。不过,您也可以设置成其他的,比如512/2048/4096等。代码如下:

$config = array(
    "digest_alg"    => "sha512",
    "private_key_bits" => 1024, 
    "private_key_type" => OPENSSL_KEYTYPE_RSA,   //加密类型
);
$res = openssl_pkey_new($config);

private_key_type就是本次的openssl的目标类型。目前可用的值是:

常量名称数值
OPENSSL_KEYTYPE_RSA0
OPENSSL_KEYTYPE_DSA1
OPENSSL_KEYTYPE_DH2
OPENSSL_KEYTYPE_EC3

不过,本文的目标是生成RSA,所以,这里主动指定了private_key_typeOPENSSL_KEYTYPE_RSA。更多信息,请参见:

苏南大叔:php如何利用openssl快速生成一组RSA钥匙对(私钥/公钥)? - php-rsa-pem-code
php如何利用openssl快速生成一组RSA钥匙对(私钥/公钥)?(图2-2)

生成私钥

//提取私钥
openssl_pkey_export($res, $private_key);

$private_key是个引用参数,不走寻常路。

生成公钥

//生成公钥
$public_key = openssl_pkey_get_details($res);
$public_key = $public_key["key"];

这个公钥的值的获取,也是不走寻常路。居然在个detail数组里面藏着...

相关链接

直接通过openssl命令行的方式,生成一组RSA密钥对儿,可以点击下面的链接查看详细步骤:

总结

如果您的测试过程中,出错了。例如:

Use of undefined constant OPENSSL_KEYTYPE_RSA - assumed 'OPENSSL_KEYTYPE_RSA' (this will throw an Error in a future version of PHP)

很有可能您的phpopenssl扩展没能正常安装,或者没有启用。

更多苏南大叔写的RSA相关经验文章,请点击下面的链接:

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。

 【福利】 腾讯云最新爆款活动!1核2G云服务器首年50元!

 【源码】本文代码片段及相关软件,请点此获取更多信息

 【绝密】秘籍文章入口,仅传授于有缘之人   openssl    rsa