簡體   English   中英

RSA模數和OpenSSL pem格式的指數

[英]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文件。 文檔將描述為:

  1. X.509證書資源
  2. 一個字符串,其格式為file://path/to/file.pem。 命名文件必須包含PEM編碼的證書/公鑰(它可能同時包含兩者)。
  3. PEM格式的公鑰。

因此,您需要根據問題中的公共密鑰配置創建PEM文件。 您擁有的模數和指數足以完成此任務。

互聯網上有幾個有關如何存檔的示例。 看一下:

基本上,您需要創建一個“ ASN1格式的文本文件”,並使用一些openssl命令。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM