gpt4 book ai didi

java - Android:使用 Assets 目录中存储的 key 文件初始化 PublicKey

转载 作者:太空宇宙 更新时间:2023-11-04 12:25:21 25 4
gpt4 key购买 nike

我目前正在研究RSA加密,并尝试使用存储在android项目的assets目录中的公钥和私钥文件进行加密和解密。

目前,公钥文件位于assets/public_key.pem我使用下面的代码来读取文件以获取 key 。

InputStream is = assetManager.open(stringKey);
String publicKeyString= "";
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
String line;

while (( line= reader.readLine()) != null) {
publicKeyString += line;
}

is.close();

然后我得到 publicKeyString 值。然后我尝试使用以下代码使用 publicKeyString 初始化 PublicKey 对象。

PublicKey pubKey = null;
byte[] publicBytes = Base64.decode(publicKeyString, Base64.DEFAULT);
X509EncodedKeySpec keySpec = new X509EncodedKeySpec(publicBytes);
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
pubKey = keyFactory.generatePublic(keySpec);

但是我遇到了以下异常

java.security.spec.InvalidKeySpecException: java.lang.RuntimeException: error:0D0680A8:asn1 encoding routines:ASN1_CHECK_TLEN:wrong tag

我不确定公钥文件本身或我使用的代码是否有问题。有什么想法吗?

最佳答案

这是一个老问题,但如果有人遇到这个问题,答案在 this post 中给出。 .

总结:

X509EncodedKeySpec expects DER-encoded data, not PEM-encoded. Your code will work fine if you simply discard the "BEGIN" and "END" blocks from the public key content

关于java - Android:使用 Assets 目录中存储的 key 文件初始化 PublicKey,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38447487/

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