1

サーバー側でphpseclibを使用して公開鍵と秘密鍵のペアを生成しました

include 'Crypt/RSA.php';
$rsa = new Crypt_RSA();
$rsa->setPrivateKeyFormat(CRYPT_RSA_PRIVATE_FORMAT_PKCS1);
$rsa->setPublicKeyFormat(CRYPT_RSA_PUBLIC_FORMAT_PKCS1);
extract($rsa->createKey());
echo $privatekey;
echo "\n\n\n";
echo $publickey;

Java Bouncy Castle エンジンを使用して、クライアント側の公開鍵をインポートします。
ここに私の公開鍵

-----BEGIN PUBLIC KEY-----
MIGJAoGBAJEGAmaQejDgJaCg/B5+g68arqpMpl6jZ9+p8TBzNRIq+Ygt/n3iqz+pAtltrlRnmqSD
svx0LMluw1wXezQ1pz2tTJTEhg6b69Qui0o//W5UDfle4yOyAHaOs8MD5nubJjXFU8vGiEdektET
jgKqiSr5TBgZoHy+YDWpd4yTemXVAgMBAAE=
-----END PUBLIC KEY-----

しかし、私はそれを行うことができます。いくつかの方法で実行しようとしましたが、常にエラーが発生します。

AsymmetricKeyParameter publicKey = 
    (AsymmetricKeyParameter) PublicKeyFactory.createKey(b64.decodeBuffer(key));
AsymmetricKeyParameter publicKey = 
    (AsymmetricKeyParameter) PublicKeyFactory.createKey(key.getBytes())

また

PEMReader pemReader = new org.bouncycastle.openssl.PEMReader (reader);
PemObject pem = pemReader.readPemObject();

これらすべての方法でエラーが発生します。

Java Bouncy Castle エンジンを使用して公開鍵をインポートするにはどうすればよいですか?

4

2 に答える 2

1

解決策を見つけました

    key = key.replaceAll("PUBLIC KEY", "RSA PUBLIC KEY");
    final Reader reader = new StringReader(key);
    PEMReader pemReader = new PEMReader(reader);
    Object obj = pemReader.readObject();
    pemReader.close();
    BCRSAPublicKey bcPublicKey = (BCRSAPublicKey) obj;

    AsymmetricKeyParameter publicKey = (AsymmetricKeyParameter) PublicKeyFactory.createKey(bcPublicKey.getEncoded());

    AsymmetricBlockCipher e = new RSAEngine();
    e = new org.bouncycastle.crypto.encodings.PKCS1Encoding(e);
    e.init(true, publicKey);

    byte[] messageBytes = inputData.getBytes();
    encryptedData = e.processBlock(messageBytes, 0, messageBytes.length);

Java側で暗号化し、サーバー(PHP)側で復号化できるようになりました

于 2012-11-07T00:14:38.357 に答える
0

最新の Git バージョンの phpseclib を試してみる価値があるかもしれません。最近のコミットからの引用:

https://github.com/phpseclib/phpseclib/commit/2f8d1055ea5a6b06cd7a40eb85661ba688a31320

それから引用すると、コミットは「[makes] Crypt_RSAの公開鍵をOpenSSLと互換性があります」。

于 2012-11-05T20:52:25.023 に答える