gpt4 book ai didi

java - 使用公钥进行 RSA 解密

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:39:08 25 4
gpt4 key购买 nike

我的 Android 项目中有一些解密问题。

我得到一个用私钥签名的字符串,我必须用公钥验证(解密)它。我想获得与使用 PHP 函数完全相同的结果 - openssl_public_decrypt ( http://php.net/manual/pl/function.openssl-public-decrypt.php )

我必须在我的 Java 项目中这样做,所以我可以使用 Java 库(例如 BouncyCaSTLe 或其他东西,有什么建议吗?)

有什么解决办法吗?

好的,这是我的代码。我得到这样的公钥

PEMReader reader = new PEMReader(new InputStreamReader(ctx
.getAssets().open("pubkey.pem")));
Object obj;
while ((obj = reader.readObject()) != null) {
if (obj instanceof RSAPublicKey) {
pubKey = (RSAPublicKey) obj;
return pubKey;
}
}

而且我总是毫无问题地获得公钥。

Cipher c = Cipher.getInstance("RSA/NONE/NoPadding", "SC");
c.init(Cipher.DECRYPT_MODE, pubKey);
byte[] result = c.doFinal(data_to_decrypt.getBytes());

结果(将字节转换为字符串后)我得到 022c06571c6a263b389fcd93159cb311abb880bddf51b7c916dd1ae...

php 函数返回的地方sd8dsa348acvcx87|00454|OK|15000|CDE 这是正确的输出。

最佳答案

Java 有 Java 密码学扩展框架,它就是为这些东西设计的。

BouncyCaSTLe 是此框架的加密提供程序。这意味着,它为您的 Java 加密扩展提供了加密算法的实现。

您将在包 java.securityjavax.crypto

中找到这方面的基本类

要使用公钥解密您的消息,您可以尝试以下操作:

// Use RSA/NONE/NoPadding as algorithm and BouncyCastle as crypto provider
Cipher asymmetricCipher = Cipher.getInstance("RSA/NONE/NoPadding", "BC");

// asume, that publicKeyBytes contains a byte array representing
// your public key
X509EncodedKeySpec publicKeySpec = new X509EncodedKeySpec(publicKeyBytes);

KeyFactory keyFactory;
keyFactory = KeyFactory.getInstance(publicKeySpec.getFormat());
Key key = keyFactory.generatePublic(publicKeySpec);

// initialize your cipher
asymmetricCipher.init(Cipher.DECRYPT_MODE, key);
// asuming, cipherText is a byte array containing your encrypted message
byte[] plainText = asymmetricCipher.doFinal(cipherText);

请注意,此示例非常基本并且缺少多个 try catch block 。此外,您不应该使用没有填充的非对称密码,因为这会使您容易受到重放攻击。您可能还会遇到 key 长度问题。在某些 Java 包中,允许的最大 key 长度受到限制。这可以通过使用无限强度策略文件来解决。

我希望,这可以帮助您开始使用 Java 密码学。

关于java - 使用公钥进行 RSA 解密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10332022/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com