Verschlüsselung und Entschlüsselung mit BouncyCastle PKCS7 - CMS in java

Möchte ich BouncyCastle zum ver-und entschlüsseln mit pkcs7-format. Ich habe einen hardware-token. wenn ich ein Schlüsselpaar im jks-Datei in meine Festplatte arbeiten gut, aber wenn ich mit Schlüssel-pair-Mädchen in token
seine Arbeit nicht. dies ist meine Ausnahme:

Exception in thread "main" org.bouncycastle.cms.CMSException: cannot create cipher: No such algorithm: 2.16.840.1.101.3.4.1.2
    at org.bouncycastle.cms.jcajce.EnvelopedDataHelper.createCipher(Unknown Source)
    at org.bouncycastle.cms.jcajce.EnvelopedDataHelper$1.doInJCE(Unknown Source)
    at org.bouncycastle.cms.jcajce.EnvelopedDataHelper.execute(Unknown Source)
    at org.bouncycastle.cms.jcajce.EnvelopedDataHelper.createContentCipher(Unknown Source)
    at org.bouncycastle.cms.jcajce.JceKeyTransEnvelopedRecipient.getRecipientOperator(Unknown Source)
    at org.bouncycastle.cms.KeyTransRecipientInformation.getRecipientOperator(Unknown Source)
    at org.bouncycastle.cms.RecipientInformation.getContentStream(Unknown Source)
    at org.bouncycastle.cms.RecipientInformation.getContent(Unknown Source)
    at pktb.PKTB.CmsDecrypt(PKTB.java:288)
    at pktb.PKTB.main(PKTB.java:419)
Caused by: java.security.NoSuchAlgorithmException: No such algorithm: 2.16.840.1.101.3.4.1.2
    at javax.crypto.Cipher.getInstance(DashoA13*..)
    at javax.crypto.Cipher.getInstance(DashoA13*..)
    at org.bouncycastle.jcajce.NamedJcaJceHelper.createCipher(Unknown Source)
    ... 10 more
Java Result: 1 

dies ist meine Verschlüsselung code:

public byte[] CmsEncrypt(byte[] message, KeyContainer keyContainer) throws NoSuchAlgorithmException, NoSuchProviderException, CMSException, IOException
{
    Security.addProvider(new BouncyCastleProvider());
    X509Certificate cert = (X509Certificate) keyContainer.certificate;
    CMSEnvelopedDataGenerator gen = new CMSEnvelopedDataGenerator();
    gen.addKeyTransRecipient(cert);
    CMSProcessable data = new CMSProcessableByteArray(message);
    CMSEnvelopedData enveloped = gen.generate(data,
    CMSEnvelopedDataGenerator.AES128_CBC, "BC");

    return  enveloped.getEncoded();

}

und das ist mein Entschlüsselungs-code:

public byte[] CmsDecrypt(byte[] cipher, KeyContainer keyContainer) throws CMSException, IOException, NoSuchProviderException
    {
        Security.addProvider(new BouncyCastleProvider());
        byte[] contents=null;
        CMSEnvelopedDataParser envelopedDataParser = new CMSEnvelopedDataParser(new ByteArrayInputStream(cipher));
        PrivateKey key =  keyContainer.privateKey;
        X509Certificate cert = keyContainer.certificate;
        CMSEnvelopedData enveloped = new CMSEnvelopedData(cipher);
        Collection recip = enveloped.getRecipientInfos().getRecipients(); 
        KeyTransRecipientInformation rinfo = (KeyTransRecipientInformation) recip  
                    .iterator().next(); 
        if(keyContainer.provider.equals("Software"))
            contents = rinfo.getContent(
                new JceKeyTransEnvelopedRecipient(key).setProvider("BC"));
        else
            contents = rinfo.getContent(
                new JceKeyTransEnvelopedRecipient(key).setProvider("SunPKCS11-" + keyContainer.provider));
        System.out.println(new String(contents));
        return contents;

    }

Muss ich sagen, dass ich mit diesem token provider für cmsSign und cmsVerify und es funktioniert, deshalb denke ich, dass das problem nicht für die Anbieter.

  • Zur info an die anderen Leser, 2.16.840.1.101.3.4.1.2 ist die OID 128-bit-AES-CBC-Modus.
  • Sind Sie sicher, dass Sie Ihre PKCS #11-token-Anbieter unterstützt 128-bit AES? Gibt es irgendetwas, was Sie ändern müssen in Ihrem token-Konfiguration zu aktivieren symmetrischen algorithmen?
  • Sie sind besser dran, fragt diese in die Hüpfburg-mailing-Liste.
  • Normalerweise braucht man sich nicht um den provider ausdrücklich, weil heutzutage der verspäteten provider-Auswahl. Dies sollte automatisch mit dem hardware-provder, wenn ein hardware-private-key verwendet wird. Darüber hinaus scheint es einige Optionen in JceKeyTransRecipient wie die Wahl der content-provider, haben Sie versucht das?
Schreibe einen Kommentar