我有这种格式的RSA公钥:
OpenSSLRSAPublicKey{modulus=9ee9f82dd8429d9fa7f091c1d375b9c289bcf2c39ec57e175a2998b4bdd083465ef0fe6c7955c821b7e883929d017a9164a60290f1622f664a72096f5d2ffda7c7825c3d657c2d13d177445fa6cdd5d68b96346006a96040f5b09baae56d0c3efeaa77d57602f69018f5cefd60cb5c71b6b6f8a4b0472e8740367266917d8c13,publicExponent=10001}
所以,我有模数和指数。
如何以PHP中的openssl_encrypt()
接受的格式转换它?
我在Google上搜索过,并没有找到任何好的东西。是不是有一种简单的格式化方式?
答案 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它为:
- X.509证书资源
- 格式为file://path/to/file.pem的字符串。指定的文件必须包含PEM编码的证书/公钥(它可能包含两者)。
- PEM格式的公钥。
因此,您需要根据问题中的公钥配置创建PEM文件。你拥有的模数和指数足以做到这一点。
互联网上有几个关于如何存档的例子。看看:
基本上你需要创建一个“ASN1格式的文本文件”并使用一些openssl命令。