- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
异常(exception)情况:
java.security.spec.InvalidKeySpecException: java.security.InvalidKeyException: IOException : DER input, Integer tag error
at sun.security.rsa.RSAKeyFactory.engineGeneratePrivate(Unknown Source)
at java.security.KeyFactory.generatePrivate(Unknown Source)
Caused by: java.security.InvalidKeyException: IOException : DER input, Integer tag error at sun.security.pkcs.PKCS8Key.decode(Unknown Source)
代码如下:
import java.io.*;
import java.security.*;
import java.security.KeyStore.PasswordProtection;
import java.security.cert.CertificateException;
import java.security.spec.*;
import javax.crypto.*;
import javax.crypto.spec.IvParameterSpec;
import org.bouncycastle.asn1.*;
import org.bouncycastle.asn1.nist.NISTObjectIdentifiers;
import org.bouncycastle.asn1.pkcs.EncryptedPrivateKeyInfo;
import org.bouncycastle.asn1.x509.AlgorithmIdentifier;
import org.bouncycastle.util.encoders.Base64;
public class KeyPairUtil {
final static String keyStoreFile = "D:\\aeskey.jks";
private static final ASN1ObjectIdentifier AES = ASN1ObjectIdentifier.getInstance(NISTObjectIdentifiers.id_aes128_CBC);
public static void main(String[] args) throws Exception {
final java.security.KeyPairGenerator gen = java.security.KeyPairGenerator.getInstance("RSA");
gen.initialize(1024);
final KeyPair keyPair = gen.generateKeyPair();
wrapKeypairWithSymmetricKey(keyPair);
}
public static KeyPair wrapKeypairWithSymmetricKey(KeyPair keyPair) {
try {
PrivateKey priv = keyPair.getPrivate();
SecretKey symmetricKey = getSymmetricKeyFromJKSFile();
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
final IvParameterSpec iv = new IvParameterSpec(new byte[16]);
cipher.init(Cipher.WRAP_MODE, symmetricKey, iv);
System.out.println(iv.getIV());
ASN1Encodable params = new DEROctetString(iv.getIV());
AlgorithmIdentifier algId = new AlgorithmIdentifier(AES, params);
byte[] wrappedKey = cipher.wrap(priv);
KeyFactory keyFactory = KeyFactory.getInstance(priv.getAlgorithm());
byte[] pkcs8enc = new EncryptedPrivateKeyInfo(algId, wrappedKey).getEncoded();
EncodedKeySpec privateKeySpec = new PKCS8EncodedKeySpec(pkcs8enc);
PrivateKey privateKey2 = keyFactory.generatePrivate(privateKeySpec); //throwing error in this line
KeyPair keypair = new KeyPair(keyPair.getPublic(), privateKey2);
return keypair;
} catch (NoSuchAlgorithmException | InvalidKeyException | InvalidKeySpecException | NoSuchPaddingException | IllegalBlockSizeException | IOException | InvalidAlgorithmParameterException e) {
e.printStackTrace();
}
return null;
}
private static SecretKey getSymmetricKeyFromJKSFile() {
String jkspassword = "password";
PasswordProtection keyPassword = new PasswordProtection("keypassword".toCharArray());
try {
KeyStore keyStore = loadKeyStore(keyStoreFile, jkspassword);
// retrieve the stored key back
KeyStore.Entry entry = keyStore.getEntry("keyentry", keyPassword);
SecretKey keyFound = ((KeyStore.SecretKeyEntry) entry).getSecretKey();
return keyFound;
} catch (CertificateException | IOException | NoSuchAlgorithmException | UnrecoverableEntryException | KeyStoreException e) {
e.printStackTrace();
}
return null;
}
private static KeyStore loadKeyStore(String fileName, String jkspassword) throws KeyStoreException, NoSuchAlgorithmException, CertificateException, FileNotFoundException, IOException {
File file = new File(fileName);
final KeyStore keyStore = KeyStore.getInstance("JCEKS");
if (file.exists()) {
keyStore.load(new FileInputStream(file), jkspassword.toCharArray());
}
return keyStore;
}
}
我希望有人知道如何解决?
最佳答案
我假设您想要生成一个封装的 PKCS#8 私钥。
然而,PKCS#8 周围有内部和外部 DER 编码结构。内部结构是为了标识存储的 key ,即它会指示一个 RSA 私钥。这就是被包裹的东西。外部结构将指示私钥是如何包装的。这是目前所缺少的。
所以发生的事情是解析器没有找到外部结构仅仅是因为你还没有生成它。该结构(部分)在 EncryptedPrivateKeyInfo 中定义。文档,我假设你可以使用 the constructor生成它。
关于java.security.spec.InvalidKeySpecException : java. security.InvalidKeyException : IOException : DER input, 整数标记错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31429879/
起初,这是我的第一篇文章——如果这篇文章没有得到很好的描述和设计,我很抱歉。 我的问题是我需要使用 Spring Boot 通过 SSL 连接连接到 GCP 中的数据库。在 GCP 内部生成三个所需的
是否可以创建相同大小的 openssl 证书(server.key.der 或 server.crt.der).. 1024 或 2048 或任何固定大小?我喜欢这一点,每次我创建证书时它都会更改大小
我有一个 DER 格式的证书文件和一个 DER 格式的 key 文件, key 是加密的。 我想创建一个包含 PEM 格式的证书和加密 key 的 cer 文件,例如: -----BEGIN CERT
我正在尝试将 certifictae 和 key 写入 stm32 的闪存 EEPROM,我知道我们可以写入字符串,但是否有可能在闪存中写入整个证书(.der)。我正在使用 stm32f7 微 Con
我正在尝试将 X509 证书写入内存中的 DER 格式。将其写入文件非常有效。 我需要 PEM 格式的证书,不带“-----BEGIN PRIVATE KEY-----”页眉、页脚或换行符。我无法弄清
为什么模数用前导零填充?我正在阅读 PKCS#1 和 PKCS#8,但没有找到任何相关信息。 在 c# 中必须删除前导零,有人知道为什么吗? 在 http://etherhack.co.uk/asym
我有一个 X.509 证书,其中包含一组带有以下隐式 [0] 标记的数据: A0 81 C6 (value)... 我有一个标准文档的摘录: The IMPLICIT [0] tag is not u
如何从代表 DER 格式证书的十六进制字符串中提取通用名称?我需要显示证书的名称,以便客户端可以选择他们希望在 Web 应用程序中使用的证书。 限制: 我需要在网络浏览器中执行此提取客户端操作。 Op
使用 BounceCaSTLe 我可以使用以下代码。它生成一个 key 对并返回 ASN.1 DER 编码格式。 //Generate new key var generator = new RsaK
我最初有一个受密码保护的 PEM 文件,其中包含使用 BouncyCaSTLe 读入 Java 应用程序的私钥。 PEM 文件开头为 -----开始 RSA 私钥----- 这让我相信它是 PKCS#
在十六进制编辑器中是否存在某种 DER 数字签名? 我得到了一个二进制内容大约为 1.3 KB 的 .cer 文件。有人告诉我它是 DER 格式,我的阅读表明具有此扩展名的证书几乎都是 DER 或带有
我有一个应用程序需要安装证书,它使用 [[UIApplication sharedApplication] openURL:[NSURL URLWithString:CERTIFICATE_URL]]
我正在尝试验证文件的签名。我按照这些说明生成证书: // generate a private key with size of 2048 bits openssl genrsa -out priva
我想创建一个能够对大整数(即 ECDSA signature r and s)进行 DER 编码和解码的 Google Go 应用程序。据我了解,我应该使用 asn1 package , 但我应该调用
我正在尝试为 Elasticsearch Searchguard 创建证书.一项要求是证书必须在 SAN 中包含 oid:1.2.3.4.5.5。我正在使用 GO 生成该证书。经过一些尝试和错误后,我
我需要从我的示例 ASN1 编译并生成一个 .DER 文件 BCAS DEFINITIONS ::= BEGIN BBCard ::= SEQUENCE { name IA5String (SIZ
我有一个 X509Certificate,我将它写入/打印到一个文件中,如下所示。 (我不是在写编码字节,因为我想阅读证书的内容) X509Certificate cer = generateCert
我正在尝试对安全网站进行 POST 调用: 步骤: 1) 转到https://www.mywebsite.com (供引用) 2) 将上述网站的 keystore 导出到C:\Program File
这是我的结构: SET OF SEQUENCE: INTEGER: XX INTEGER: YY 我的编码是这样的: 11 08 10 06 02 01 XX 02 01 Y
我见过很多问题,但没有一个真正提供好的答案,或者即使他们尝试了,他们也会假设提出问题的人并没有问他实际上在问什么。郑重声明,我不是在询问签名、加密或 PEM 文件! 就我而言,我将收到一个加密数据的小
我是一名优秀的程序员,十分优秀!