PHP格式化RSA公钥私钥(pem文件)

问题描述:

JAVA丢过来一串字符串说是RSA公/私钥,直接用于加密时提示失败。PHP是需要转为pem格式后才能使用,这里记录一下。

环境:

  • PHP 72
  • 使用openss_*函数簇

代码如下:

pem格式以64位长度换行分割,前后分别加上公私钥分割标志生成。

$publicKey = 'MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCwwJTNyd42qDZug/sPxzLSddApwfL9IXXqgRiCZ2QDjrpE/KcxrObYHqtU6xQqz1GLJkSbrZWS/2M0/Bf3QE60CMIjOAHkxX6hBE7kfkMXKrMf8w16N8GOcG/RnSIl4HtZGwj9zRIGHDVUKlpjd2EvIzl02cFe7zF8yf8zUiXBvQIDAQAB';
$privateKey = 'MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBALDAlM3J3jaoNm6D+w/HMtJ10CnB8v0hdeqBGIJnZAOOukT8pzGs5tgeq1TrFCrPUYsmRJutlZL/YzT8F/dATrQIwiM4AeTFfqEETuR+Qxcqsx/zDXo3wY5wb9GdIiXge1kbCP3NEgYcNVQqWmN3YS8jOXTZwV7vMXzJ/zNSJcG9AgMBAAECgYAbw/TcKuTsYxpB3Bu5S8pxAy7TEHOSTgpO7z6hZYpxgJ9ELQg6pnWQ56h0a4U8gFrH6BgI+IixkcrMzPkazxBNtpLR1YZEIGq/9fY6hfPA7L6sVHULebuU3y4IQX3oZkmnSjTv+4uTE9q2prPsOPkSbRmPmBp+Wk7KLOhDRullRQJBAOtECul2kEvM1aPDo2A3D32+hGQ/zs/fx8DFJaFq9P5KAwaDE4knvLhwwSk3I5V4QljwJL2TnEvaskRcxU5LzusCQQDAVGJARLfMwGGzsVAVHPE1dRc3I87+xSPKxgOZfTSCWywPMi9hynEwsoiTNrjJIrRjid+yfoPhTXqiOFHvvhf3AkEAnR58Cx7bj0PlCdGGMqOS/O9Xi3vxqnJQ/TSsxPihVZIoIxk22spnBuaGmffxE8mUxcDbSKBkKWSM2Yr7WibWsQJBALvBJPEspGmD3V04Wb9is67GEdXIZUidV2WajOUIL3yaWJa1HUBQCtPJVj6wiw//iy4o6HItw7zskC1Q4dwzLN0CQEf+7nEzIAFBp6XzvcDc7x8wn8sn2P6BKowEUd6f6Xrr/orb5E2T3NAz+bH/6gFkFqt+WfdQ/CCwNIB04GG8KLs=';

$pubPem = chunk_split($publicKey,64,"\n");
$pubPem = "-----BEGIN PUBLIC KEY-----\n" . $pubPem . "-----END PUBLIC KEY-----\n";
var_dump($pubPem);
// 验证公钥格式是否正确
$pu_key = openssl_pkey_get_public($pubPem);
if (!$pu_key) die('$pu_key 格式不正确');

$priPem = chunk_split($privateKey,64,"\n");
$priPem = "-----BEGIN PRIVATE KEY-----\n" . $priPem . "-----END PRIVATE KEY-----\n";
var_dump($priPem);
// 验证私钥格式是否正确
$pi_key = openssl_pkey_get_private($priPem);
if (!$pi_key) die('$pi_key 格式不正确');

验证:

使用 openssl_pkey_get_public() 、openssl_pkey_get_private() 来验证,返回值为 true 验证通过

Author: thinkwei

2 thoughts on “PHP格式化RSA公钥私钥(pem文件)

  1. // 验证私钥格式是否正确
    $pi_key = openssl_pkey_get_public($priPem);
    这里是openssl_pkey_get_private

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注