RSA模数和OpenSSL pem格式的指数

时间:2018-03-03 18:07:47

标签: php rsa

我有这种格式的RSA公钥:

OpenSSLRSAPublicKey{modulus=9ee9f82dd8429d9fa7f091c1d375b9c289bcf2c39ec57e175a2998b4bdd083465ef0fe6c7955c821b7e883929d017a9164a60290f1622f664a72096f5d2ffda7c7825c3d657c2d13d177445fa6cdd5d68b96346006a96040f5b09baae56d0c3efeaa77d57602f69018f5cefd60cb5c71b6b6f8a4b0472e8740367266917d8c13,publicExponent=10001}

所以,我有模数和指数。 如何以PHP中的openssl_encrypt()接受的格式转换它? 我在Google上搜索过,并没有找到任何好的东西。是不是有一种简单的格式化方式?

2 个答案:

答案 0 :(得分:0)

假设您的意思是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;

Altho说,如果您要使用phpseclib来转换密钥,为什么不使用它来加密您尝试加密的任何内容?:

//$rsa->setEncryptionMode(CRYPT_RSA_ENCRYPTION_PKCS1);
$rsa->encrypt('plaintext');

答案 1 :(得分:-1)

不,没有办法做到这一点。公钥/私钥只能用于非对称加密。 openssl_encrypt()需要对称加密。

非对称加密所需的

openssl_public_encrypt()需要一个公钥密钥资源。这可以使用openssl_pkey_get_public()获得。

现在,openssl_pkey_get_public()需要一个PEM文件。 docs describe它为:

  
      
  1. X.509证书资源
  2.   
  3. 格式为file://path/to/file.pem的字符串。指定的文件必须包含PEM编码的证书/公钥(它可能包含两者)。
  4.   
  5. PEM格式的公钥。
  6.   

因此,您需要根据问题中的公钥配置创建PEM文件。你拥有的模数和指数足以做到这一点。

互联网上有几个关于如何存档的例子。看看:

基本上你需要创建一个“ASN1格式的文本文件”并使用一些openssl命令。