gpt4 book ai didi

java - 使用 Java 将 ASN1 序列解码为 RSA 公钥

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:44:42 26 4
gpt4 key购买 nike

我有以下 RSA 公钥作为 ASN1 序列:

SEQUENCE(2 elem)
INTEGER (1024 bit) 14832…
INTEGER 65537

如何在 Java 中将此序列导入为 RSA 公钥?已实现的 KeySpec(例如 PKCS8EncodedKeySpec)不起作用(显然)。

此外,我尝试使用 BouncyCaSTLe 并手动解码序列并自行初始化 java.security.spec.RSAPublicKeySpec。然而,这种方法似乎相当笨拙。

有没有更简单的方法?

最佳答案

您可以在以下代码片段中使用 BouncycaSTLe 库:

import java.io.IOException;
import java.math.BigInteger;
import org.bouncycastle.asn1.ASN1EncodableVector;
import org.bouncycastle.asn1.ASN1InputStream;
import org.bouncycastle.asn1.ASN1Integer;
import org.bouncycastle.asn1.DERSequence;
import org.bouncycastle.asn1.DLSequence;

public class RsaAsn1Example {
// ...
public static BigInteger [] parseASN1RsaPublicKey(byte [] encoded) throws IOException {
ASN1InputStream asn1_is = new ASN1InputStream(encoded);
DLSequence dlSeq = (DLSequence) asn1_is.readObject();
ASN1Integer asn1_n = (ASN1Integer) dlSeq.getObjectAt(0);
ASN1Integer asn1_e = (ASN1Integer) dlSeq.getObjectAt(1);
asn1_is.close();
return new BigInteger[]{ asn1_n.getPositiveValue(), asn1_e.getPositiveValue()};
}
// ....
}

或者,作为一个不太吸引人的选择,您可以使用自己的 ASN.1 解码器,如 this example来 self 的一个答案。但请注意,ASN.1 解码可能非常棘手——这个非常简单的两个元素序列是我尝试用自己的代码解析的最复杂的 ASN.1 结构。

关于java - 使用 Java 将 ASN1 序列解码为 RSA 公钥,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29565772/

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