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()
我看过很多可以使用 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()