gpt4 book ai didi

java - X509Generator 类型的方法SubjectKeyIdentifier(SubjectPublicKeyInfo) 未定义

转载 作者:行者123 更新时间:2023-12-02 01:53:23 34 4
gpt4 key购买 nike

我获取了一个开源代码,并尝试在我的项目中使用它,但出现此错误:X509Generator 类型的方法SubjectKeyIdentifier(SubjectPublicKeyInfo) 未定义。我的代码如下:

import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.math.BigInteger;
import java.security.GeneralSecurityException;
import java.security.KeyPair;
import java.security.PublicKey;
import java.security.SecureRandom;
import java.security.cert.X509Certificate;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimeZone;

import org.bouncycastle.asn1.ASN1EncodableVector;
import org.bouncycastle.asn1.ASN1InputStream;
import org.bouncycastle.asn1.ASN1Sequence;
import org.bouncycastle.asn1.DERSequence;
import org.bouncycastle.asn1.x509.AuthorityKeyIdentifier;
import org.bouncycastle.asn1.x509.BasicConstraints;
import org.bouncycastle.asn1.x509.ExtendedKeyUsage;
import org.bouncycastle.asn1.x509.Extensions;
import org.bouncycastle.asn1.x509.GeneralName;
import org.bouncycastle.asn1.x509.GeneralNames;
import org.bouncycastle.asn1.x509.KeyPurposeId;
import org.bouncycastle.asn1.x509.KeyUsage;
import org.bouncycastle.asn1.x509.SubjectKeyIdentifier;
import org.bouncycastle.asn1.x509.SubjectPublicKeyInfo;
import org.bouncycastle.asn1.x509.X509Extensions;
import org.bouncycastle.asn1.x509.X509Name;
import org.bouncycastle.jce.X509Principal;
import org.bouncycastle.x509.X509V3CertificateGenerator;

...

private SubjectKeyIdentifier getSubjectKeyIdentifier(PublicKey publicKey)
throws IOException
{
InputStream input;
SubjectPublicKeyInfo keyInfo;

input = new ByteArrayInputStream(publicKey.getEncoded());
keyInfo = new SubjectPublicKeyInfo((ASN1Sequence)new ASN1InputStream(input).readObject());

return SubjectKeyIdentifier(keyInfo);
}

我想我需要使用 509Extension 但我不知道如何使用。而且我不知道这是否也是解决我的问题的好方法。谢谢您的回答!

最佳答案

您修改了类的名称,但我敢打赌它是 X509Generator。虽然 SubjectKeyIdentifier 是导入的 bouncycaSTLe 类的名称,因此可见,但 return subjectKeyIdentifier (args) 不是类名的有效语法,因此编译器会尝试将其解释为您的类中的方法名称,该名称不存在,因此会出现错误。

可能您想调用此类的构造函数,或者其中的静态方法。但这两个都不存在以 SubjectPublicKeyInfo 作为参数,可能是因为从 key 计算 keyid 是很重要的;请参阅rfc 32805280 。相反(假设您有 bcpkix 以及 bcprov)使用 JcaX509ExtensionUtils.createSubjectKeyIdentifier (或其 Truncated 兄弟)直接在 (JCE) PublicKey 对象上,或者在 SubjectPublicKeyInfo 上使用父类(super class) X509ExtensionUtils ,您可以直接从编码构造它(无需处理ASN1 明确)使用

SubjectPublicKeyInfo.getInstance(encoding /*e.g. publickey.getEncoded()*/)

使用 X509V3CertificateGenerator(如果您没有注意到它已被弃用,已被 bcpkix 中的 X509v3CertificateBuilder 废弃),您无需管理 X509Extension 对象本身,尽管它们存在于内部。您只需调用

generator.addExtension(oid_obj_or_string,boolean critical,encodable_or_bytearray)

与新版本相关:Using DEROctetString vs pure Extension

And i don't know if it's a good way to solve my problem too.

既然你不告诉我们你的问题是什么,我也不知道。

关于java - X509Generator 类型的方法SubjectKeyIdentifier(SubjectPublicKeyInfo) 未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57412583/

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