Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用bouncycastle从CMS封装的数据中提取加密的会话密钥_Java_Bouncycastle_Hsm - Fatal编程技术网

Java 使用bouncycastle从CMS封装的数据中提取加密的会话密钥

Java 使用bouncycastle从CMS封装的数据中提取加密的会话密钥,java,bouncycastle,hsm,Java,Bouncycastle,Hsm,我正在从事一个项目(Java),需求要求我们必须从第三方解密CMS信封。与此公钥对应的私钥存储在HSM中,不可导出。所以我所需要做的就是从CMS信封中提取加密的会话密钥并对其进行解密,然后使用解密的会话密钥对内容进行解密。 这个计划听起来很简单,唯一的问题是我不知道如何提取加密的会话密钥,如果bouncy castle中有办法,如果我提供解密的会话密钥,它将像使用软键一样对内容本身进行解密。感谢您为我指出测试案例。我在pkix包中没有找到任何东西,但在核心包中有一些测试用例,对我帮助很大。我能够

我正在从事一个项目(Java),需求要求我们必须从第三方解密CMS信封。与此公钥对应的私钥存储在HSM中,不可导出。所以我所需要做的就是从CMS信封中提取加密的会话密钥并对其进行解密,然后使用解密的会话密钥对内容进行解密。 这个计划听起来很简单,唯一的问题是我不知道如何提取加密的会话密钥,如果bouncy castle中有办法,如果我提供解密的会话密钥,它将像使用软键一样对内容本身进行解密。

感谢您为我指出测试案例。我在pkix包中没有找到任何东西,但在核心包中有一些测试用例,对我帮助很大。我能够使用这些库提取会话密钥和加密数据

ContentInfo info=ContentInfo.getInstance(ASN1Primitive.fromByteArray(encryptedData));
EnvelopedData envData=EnvelopedData.getInstance(info.getContent());
ASN1Set s=envData.getRecipientInfos();
RecipientInfo RecipientInfo=RecipientInfo.getInstance(s.getObjectAt(0));
字节[]加密密钥;
if(recipientInfo.getInfo()KeyTransRecipientInfo的实例){
KeyTransRecipientInfo KeyTransRecipientInfo=KeyTransRecipientInfo.getInstance(recipientInfo.getInfo());
encryptedKey=keyTransRecipientInfo.getEncryptedKey().getOctets();
算法标识符keyEncryptionAlgorithm=keyTransRecipientInfo.getKeyEncryptionAlgorithm();
info(“对称加密算法:{}”,keyEncryptionAlgorithm.getAlgorithm().getId());
info(“八位加密密钥:{}”,Hex.toHexString(encryptedKey));
}否则{
抛出新的IllegalStateException(“预期的KeyTransRecipientInfo”);
}
算法标识符contentEncryptionAlgorithm=envData.getEncryptedContentInfo().getContentEncryptionAlgorithm();
info(“对称加密算法:+contentEncryptionAlgorithm.getAlgorithm().getId());
logger.info(“八位加密数据:”+Hex.toHexString(envData.getEncryptedContentInfo().getEncryptedContent().getOctets());

看起来很痛苦。查看BC PKIX源代码中的
org.bouncycastle.cert.cmp.test.AllTests.java
,以获取使用HSM必须修改的内容的提示。