简体   繁体   English

Java中的PKCS#7解密代码

[英]PKCS#7 Decryption Code in Java

I am very new to this area. 我是这个领域的新手。 I'm trying to develop a simply PCKS#7 encrypt/decrypt function in Java. 我正在尝试用Java开发一个简单的PCKS#7加密/解密功能。 The encrypt is without signing yet, I just want to test the encrypt/decrypt (the key is from a keystore) 加密尚未签名,我只想测试加密/解密(密钥来自密钥库)

Below is my encryption code. 下面是我的加密代码。

private static byte[] encryptData() throws Exception {

    Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
    FileInputStream fIn = new FileInputStream(_keyStorePath);
    KeyStore keystore = KeyStore.getInstance("JKS");
    keystore.load(fIn, _password);
    Certificate cert = keystore.getCertificate("abc");
    fIn.close();

    // set up the generator
    CMSEnvelopedDataGenerator gen = new CMSEnvelopedDataGenerator();

    gen.addRecipientInfoGenerator(new JceKeyTransRecipientInfoGenerator((X509Certificate) cert).setProvider("BC"));

    // create the enveloped-data object
    CMSProcessable data = new CMSProcessableByteArray("Hello World!".getBytes());
    CMSEnvelopedData enveloped = gen.generate((CMSTypedData) data,new JceCMSContentEncryptorBuilder(CMSAlgorithm.DES_EDE3_CBC).setProvider("BC").build());
    return  enveloped.getEncoded();
}

How do I code a very simple decryption function(no verify signing) to decryption my file ? 如何编写一个非常简单的解密函数(无需验证签名)来解密我的文件?

I do some research online, 1 of the sample code I google it is `RecipientId recId = new RecipientId(); 我在网上进行了一些研究,其中一个示例代码是google,它是`RecipientId recId = new RecipientId();

    recId.setSerialNumber(cert.getSerialNumber());
    recId.setIssuer(cert.getIssuerX500Principal().getEncoded());

    RecipientInformationStore recipients = enveloped.getRecipientInfos();
    RecipientInformation recipient = recipients.get(recId);

    byte[] recData = recipient.getContent(key, "BC");`

However, the "RecipientId recId = new RecipientId();" 但是,“ RecipientId recId = new RecipientId();” is not working, error msg : Cannot instantiate the type RecipientId 无法正常工作,错误消息:无法实例化RecipientId类型

Thank you very much. 非常感谢你。

I think there is some changes for the new API. 我认为新API会有一些更改。

Below should be the correct one, 下面应该是正确的,

X509Certificate cert9 = (X509Certificate) keystore.getCertificate("abc");
    KeyTransRecipientId recId = new JceKeyTransRecipientId(cert9.getIssuerX500Principal(), cert9.getSerialNumber());

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM