java 中的 bouncycastle 是否可以使用 SMIME 加密常规文件

Is it possible to encrypt a regular file using SMIME by bouncycastle in java

我看过很多可以使用 SMIME 加密和发送电子邮件的示例,但没有加密常规文件的示例。 我有一种方法,可以在 bd 中插入密钥,但我不知道如何使用 bouncycastle 的 SMIME 来加密文件。

public CifradoDeArchivos obtenerCifradoDeArchivosParticular(
            ParametrizacionCifradoArchivosBancos parametrizacionCifradoArchivosBancos) {

        CifradoDeArchivos newInstance = null;
        try {           
                // Se realiza la introspección
                Class<?> clazz = Class
                        .forName(parametrizacionCifradoArchivosBancos
                                .getClaseImplementacion());
                Constructor<?> clazzConstructor = clazz.getConstructor();
                newInstance = (CifradoDeArchivos) clazzConstructor
                        .newInstance();

        } catch (NoClassDefFoundError e) {
            logger.info(e.getMessage());
        } 
        return newInstance;
    }

你可以使用bouncycastle提供的cms加密文件,前提是你有public个密钥。 Smime 更倾向于电子邮件。

片段如下:

CMSEnvelopedDataGenerator enGen = new CMSEnvelopedDataGenerator();

    for (Certificate c : certs) {
        enGen.addRecipientInfoGenerator(
                new JceKeyTransRecipientInfoGenerator((X509Certificate) c));
    }
    OutputEncryptor encryptor =
            new JceCMSContentEncryptorBuilder(CMSAlgorithm.AES256_CBC).setProvider("BC").build();
    CMSEnvelopedData envelopedData = enGen.generate(new CMSProcessableByteArray(bos.toByteArray()),
            encryptor);

那么加密后的数据就是:

envelopedData.getEncoded()