![](/img/trans.png)
[英]How to generate a DER/PEM certificate from public exponent and modulus of RSA?
[英]RSA Modulus and Exponent to OpenSSL pem Format
我有以下格式的RSA公鑰:
OpenSSLRSAPublicKey{modulus=9ee9f82dd8429d9fa7f091c1d375b9c289bcf2c39ec57e175a2998b4bdd083465ef0fe6c7955c821b7e883929d017a9164a60290f1622f664a72096f5d2ffda7c7825c3d657c2d13d177445fa6cdd5d68b96346006a96040f5b09baae56d0c3efeaa77d57602f69018f5cefd60cb5c71b6b6f8a4b0472e8740367266917d8c13,publicExponent=10001}
因此,我有模數和指數。 如何將其轉換為PHP中的openssl_encrypt()
接受的格式? 我已經在Google上搜索,但沒有找到任何好的方法。 沒有簡單的格式化方法嗎?
假設您的意思是openssl_public_encrypt()
而不是openssl_encrypt()
,然后嘗試使用phpseclib 1.0:
<?php
include('Crypt/RSA.php')
include('Math/BigInteger.php');
$rsa = new Crypt_RSA();
$rsa->loadKey(array(
'n' => new Math_BigInteger('9ee9f82dd8429d9fa7f091c1d375b9c289bcf2c39ec57e175a2998b4bdd083465ef0fe6c7955c821b7e883929d017a9164a60290f1622f664a72096f5d2ffda7c7825c3d657c2d13d177445fa6cdd5d68b96346006a96040f5b09baae56d0c3efeaa77d57602f69018f5cefd60cb5c71b6b6f8a4b0472e8740367266917d8c13', 16),
'e' => new Math_BigInteger('10001', 16)
));
echo $rsa;
話雖這么說,如果您要使用phpseclib轉換密鑰,為什么不使用它來加密也要加密的東西呢:
//$rsa->setEncryptionMode(CRYPT_RSA_ENCRYPTION_PKCS1);
$rsa->encrypt('plaintext');
不,沒有任何辦法可以做到這一點。 公鑰/私鑰只能用於非對稱加密中。 openssl_encrypt()
需要對稱加密。
非對稱密碼所需的openssl_public_encrypt()
需要公共密鑰資源。 這可以使用openssl_pkey_get_public()
獲得。
現在, openssl_pkey_get_public()
需要一個PEM文件。 文檔將其描述為:
- X.509證書資源
- 一個字符串,其格式為file://path/to/file.pem。 命名文件必須包含PEM編碼的證書/公鑰(它可能同時包含兩者)。
- PEM格式的公鑰。
因此,您需要根據問題中的公共密鑰配置創建PEM文件。 您擁有的模數和指數足以完成此任務。
互聯網上有幾個有關如何存檔的示例。 看一下:
基本上,您需要創建一個“ ASN1格式的文本文件”,並使用一些openssl命令。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.