如何使用PHP将PEM格式RSA键转换为XML格式

发布于 2025-02-03 06:03:51 字数 1237 浏览 3 评论 0原文

我正在尝试将键对从PEM格式转换

-----BEGIN PUBLIC KEY----- 

-----END PUBLIC KEY-----

为XML格式:

<RSAKeyValue>
<Exponent> </Exponent>
<Modulus> </Modulus>
</RSAKeyValue>

在我通过它生成键时仅使用OpenSSL可以使用?

NB:为了测试目的,我的钥匙存储在$ privkey和$ pubkey变量中,因此我希望能够$ echo $ echo xml格式密钥,而不是暂时不将其存储到文件中。

NB':我尝试使用phpseclib与一个景象一起找到在这里但是 给了我这个错误“未被发现的错误:类“ basecontroller”

<?php

$config = array
(
    'config' => 'C:\xampp\htdocs\crypto\openssl.cnf',
    'default_md' => 'sha512',
    'private_key_bits' => 4096,
    'private_key_type' => OPENSSL_KEYTYPE_RSA,
);

$keypair = openssl_pkey_new($config);

openssl_pkey_export($keypair, $privKey, null, $config);

$publickey = openssl_pkey_get_details($keypair);
$pubKey = $publickey['key'];

use phpseclib3\Crypt\RSA;
echo $pubKey->toString("XML");
echo "$privKey";

?>

I'm trying to convert key pair from PEM format :

-----BEGIN PUBLIC KEY----- 

-----END PUBLIC KEY-----

Into XML format :

<RSAKeyValue>
<Exponent> </Exponent>
<Modulus> </Modulus>
</RSAKeyValue>

Is it possible using only openssl as I generate the keys through it ?

nb : my keys are stored into $privKey and $pubKey variable for test purpose, so I want to be able to $echo the XML format key and not store it into a file for the moment.

nb' : I have tried using phpseclib with an exemple found here but it gives me this error "Uncaught Error: Class "BaseController" not found in ..."

Thanks for your help

Here is the PHP code :

<?php

$config = array
(
    'config' => 'C:\xampp\htdocs\crypto\openssl.cnf',
    'default_md' => 'sha512',
    'private_key_bits' => 4096,
    'private_key_type' => OPENSSL_KEYTYPE_RSA,
);

$keypair = openssl_pkey_new($config);

openssl_pkey_export($keypair, $privKey, null, $config);

$publickey = openssl_pkey_get_details($keypair);
$pubKey = $publickey['key'];

use phpseclib3\Crypt\RSA;
echo $pubKey->toString("XML");
echo "$privKey";

?>

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

梦途 2025-02-10 06:03:51

可以使用phpseclib进行X.509/SPKI格式中的PEM编码键转换为XML格式,如下所示:

use phpseclib3\Crypt\PublicKeyLoader;

$x509pem = '-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAunF5aDa6HCfLMMI/MZLT
5hDk304CU+ypFMFiBjowQdUMQKYHZ+fklB7GpLxCatxYJ/hZ7rjfHH3Klq20/Y1E
bYDRopyTSfkrTzPzwsX4Ur/l25CtdQldhHCTMgwf/Ev/buBNobfzdZE+Dhdv5lQw
KtjI43lDKvAi5kEet2TFwfJcJrBiRJeEcLfVgWTXGRQn7gngWKykUu5rS83eAU1x
H9FLojQfyia89/EykiOO7/3UWwd+MATZ9HLjSx2/Lf3g2jr81eifEmYDlri/OZp4
OhZu+0Bo1LXloCTe+vmIQ2YCX7EatUOuyQMt2Vwx4uV+d/A3DP6PtMGBKpF8St4i
GwIDAQAB
-----END PUBLIC KEY-----';

$publicKey = PublicKeyLoader::load($x509pem);   // import public PEM key
$xmlFormattedKey = $publicKey->toString("XML"); // export public XML key
print($xmlFormattedKey);

输出为:

<RSAKeyValue>     
    <Modulus>unF5aDa6HCfLMMI/MZLT5hDk304CU+ypFMFiBjowQdUMQKYHZ+fklB7GpLxCatxYJ/hZ7rjfHH3Klq20/Y1EbYDRopyTSfkrTzPzwsX4Ur/l25CtdQldhHCTMgwf/Ev/buBNobfzdZE+Dhdv5lQwKtjI43lDKvAi5kEet2TFwfJcJrBiRJeEcLfVgWTXGRQn7gngWKykUu5rS83eAU1xH9FLojQfyia89/EykiOO7/3UWwd+MATZ9HLjSx2/Lf3g2jr81eifEmYDlri/OZp4OhZu+0Bo1LXloCTe+vmIQ2YCX7EatUOuyQMt2Vwx4uV+d/A3DP6PtMGBKpF8St4iGw==</Modulus>
    <Exponent>AQAB</Exponent>
</RSAKeyValue>

对于密钥生成,可以像代码中的密钥生成OpenSSL一起使用。但是,必须在phpseclib零件中导入导出的PEM密钥,如上所述(代码中缺少此导入):

// Key generation with OpenSSL
$config = array(
    "private_key_bits" => 2048,
    "private_key_type" => OPENSSL_KEYTYPE_RSA,
);

$res = openssl_pkey_new($config);                // create key resource using $config 
//openssl_pkey_export($res, $privKey);           // export private key (PEM encoded, PKCS#8 format); not required for this example
$pubKeyDetails = openssl_pkey_get_details($res);
$x509pem = $pubKeyDetails["key"];                // export public key (PEM encoded, X.509 format)

// Key conversion with phpseclib
$publicKey = PublicKeyLoader::load($x509pem);   // import public PEM key generated with OpenSSL
$xmlFormattedKey = $publicKey->toString("XML"); // export public XML key 
print($xmlFormattedKey);

另外,也可以使用phpseclib进行密钥生成:

use phpseclib3\Crypt\RSA;

$privateKey = RSA::createKey(2048);                              // generate private key
$xmlFormattedKey = $privateKey->getPublicKey()->toString("XML"); // export public XML key
print($xmlFormattedKey);

The conversion of a PEM encoded key in X.509/SPKI format to XML format can be done with phpseclib as follows:

use phpseclib3\Crypt\PublicKeyLoader;

$x509pem = '-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAunF5aDa6HCfLMMI/MZLT
5hDk304CU+ypFMFiBjowQdUMQKYHZ+fklB7GpLxCatxYJ/hZ7rjfHH3Klq20/Y1E
bYDRopyTSfkrTzPzwsX4Ur/l25CtdQldhHCTMgwf/Ev/buBNobfzdZE+Dhdv5lQw
KtjI43lDKvAi5kEet2TFwfJcJrBiRJeEcLfVgWTXGRQn7gngWKykUu5rS83eAU1x
H9FLojQfyia89/EykiOO7/3UWwd+MATZ9HLjSx2/Lf3g2jr81eifEmYDlri/OZp4
OhZu+0Bo1LXloCTe+vmIQ2YCX7EatUOuyQMt2Vwx4uV+d/A3DP6PtMGBKpF8St4i
GwIDAQAB
-----END PUBLIC KEY-----';

$publicKey = PublicKeyLoader::load($x509pem);   // import public PEM key
$xmlFormattedKey = $publicKey->toString("XML"); // export public XML key
print($xmlFormattedKey);

The output is:

<RSAKeyValue>     
    <Modulus>unF5aDa6HCfLMMI/MZLT5hDk304CU+ypFMFiBjowQdUMQKYHZ+fklB7GpLxCatxYJ/hZ7rjfHH3Klq20/Y1EbYDRopyTSfkrTzPzwsX4Ur/l25CtdQldhHCTMgwf/Ev/buBNobfzdZE+Dhdv5lQwKtjI43lDKvAi5kEet2TFwfJcJrBiRJeEcLfVgWTXGRQn7gngWKykUu5rS83eAU1xH9FLojQfyia89/EykiOO7/3UWwd+MATZ9HLjSx2/Lf3g2jr81eifEmYDlri/OZp4OhZu+0Bo1LXloCTe+vmIQ2YCX7EatUOuyQMt2Vwx4uV+d/A3DP6PtMGBKpF8St4iGw==</Modulus>
    <Exponent>AQAB</Exponent>
</RSAKeyValue>

For key generation OpenSSL can be used as in your code. However, the exported PEM key must be imported in the phpseclib part as shown in the code above (this import is missing in your code):

// Key generation with OpenSSL
$config = array(
    "private_key_bits" => 2048,
    "private_key_type" => OPENSSL_KEYTYPE_RSA,
);

$res = openssl_pkey_new($config);                // create key resource using $config 
//openssl_pkey_export($res, $privKey);           // export private key (PEM encoded, PKCS#8 format); not required for this example
$pubKeyDetails = openssl_pkey_get_details($res);
$x509pem = $pubKeyDetails["key"];                // export public key (PEM encoded, X.509 format)

// Key conversion with phpseclib
$publicKey = PublicKeyLoader::load($x509pem);   // import public PEM key generated with OpenSSL
$xmlFormattedKey = $publicKey->toString("XML"); // export public XML key 
print($xmlFormattedKey);

Alternatively, also key generation can be done with phpseclib:

use phpseclib3\Crypt\RSA;

$privateKey = RSA::createKey(2048);                              // generate private key
$xmlFormattedKey = $privateKey->getPublicKey()->toString("XML"); // export public XML key
print($xmlFormattedKey);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文