首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PhpSeclib <-> BouncyCastle RSA

PhpSeclib <-> BouncyCastle RSA
EN

Stack Overflow用户
提问于 2012-11-05 18:01:03
回答 2查看 2K关注 0票数 1

我使用phpseclib在服务器端生成了一对公钥/私钥,比如

代码语言:javascript
复制
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引擎在客户端导入公钥。

这里是我的公钥

代码语言:javascript
复制
-----BEGIN PUBLIC KEY-----
MIGJAoGBAJEGAmaQejDgJaCg/B5+g68arqpMpl6jZ9+p8TBzNRIq+Ygt/n3iqz+pAtltrlRnmqSD
svx0LMluw1wXezQ1pz2tTJTEhg6b69Qui0o//W5UDfle4yOyAHaOs8MD5nubJjXFU8vGiEdektET
jgKqiSr5TBgZoHy+YDWpd4yTemXVAgMBAAE=
-----END PUBLIC KEY-----

但我能做到。我尝试了几种方法,但总是遇到错误。

代码语言:javascript
复制
AsymmetricKeyParameter publicKey = 
    (AsymmetricKeyParameter) PublicKeyFactory.createKey(b64.decodeBuffer(key));
AsymmetricKeyParameter publicKey = 
    (AsymmetricKeyParameter) PublicKeyFactory.createKey(key.getBytes())

也是

代码语言:javascript
复制
PEMReader pemReader = new org.bouncycastle.openssl.PEMReader (reader);
PemObject pem = pemReader.readPemObject();

所有这些方法都会产生错误。

如何使用Java Bouncy Castle engine导入公钥?

EN

回答 2

Stack Overflow用户

发布于 2012-11-07 08:14:38

我找到了解决方案

代码语言:javascript
复制
    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)端解密

票数 1
EN

Stack Overflow用户

发布于 2012-11-06 04:52:25

使用最新的Git版本的phpseclib可能值得一试。引用半最近的提交:

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

引用它的话说,提交“使Crypt的公钥与OpenSSL兼容”。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13229751

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档