Php RSA模数和指数转换为OpenSSL pem格式

Php RSA模数和指数转换为OpenSSL pem格式,php,rsa,Php,Rsa,我有以下格式的RSA公钥: OpenSSLRSAPublicKey{modulus=9ee9f82dd8429d9fa7f091c1d375b9c289bcf2c39ec57e175a2998b4bdd083465ef0fe6c7955c821b7e883929d017a9164a60290f1622f664a72096f5d2ffda7c7825c3d657c2d13d177445fa6cdd5d68b96346006a96040f5b09baae56d0c3efeaa77d57602f690

我有以下格式的RSA公钥:

OpenSSLRSAPublicKey{modulus=9ee9f82dd8429d9fa7f091c1d375b9c289bcf2c39ec57e175a2998b4bdd083465ef0fe6c7955c821b7e883929d017a9164a60290f1622f664a72096f5d2ffda7c7825c3d657c2d13d177445fa6cdd5d68b96346006a96040f5b09baae56d0c3efeaa77d57602f69018f5cefd60cb5c71b6b6f8a4b0472e8740367266917d8c13,publicExponent=10001}
我有模量和指数。 如何将其转换为PHP中的
openssl\u encrypt()
所接受的格式?
我在谷歌上搜索过,没有找到什么好东西。难道没有一种简单的方法来格式化它吗?

不,没有任何方法可以做到这一点。公钥/私钥只能用于非对称加密
openssl\u encrypt()
需要对称加密

非对称加密所需的openssl\u public\u encrypt()需要一个公钥资源。这可以使用
openssl\u pkey\u get\u public()
获得

现在,
openssl\u pkey\u get\u public()
需要一个PEM文件。报告内容如下:

  • X.509证书资源
  • 具有以下格式的字符串:file://path/to/file.pem. 命名文件必须包含PEM编码的证书/公钥(它可能同时包含两者)
  • PEM格式的公钥
  • 因此,您需要根据问题中的公钥配置创建一个PEM文件。你得到的模数和指数足以做到这一点

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

    • rawrsa()

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

    假设您指的是
    openssl\u public\u encrypt()
    而不是
    openssl\u encrypt()
    ,然后尝试此操作(使用phpseclib 1.0):


    你的指数中似乎有一个太多的零(1048577对65537),除非我遗漏了什么。我正在用phpseclib 1.0尝试它,因为2.0并不真的想在我的机器上工作。问题是每次我用相同的mod和exponent@Introser-密文每次都应该是不同的。引用,其中一个步骤是“生成长度为k-mLen-3的八位元字符串PS,由伪随机生成的非零八位元组成”。这样做是为了防止已知的明文攻击。@Introser-我已经更新了我的帖子,使用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;
    
    //$rsa->setEncryptionMode(CRYPT_RSA_ENCRYPTION_PKCS1);
    $rsa->encrypt('plaintext');