首页 > 解决方案 > Android 9 及更高版本上的 CMS 加密

问题描述

谷歌今年宣布它正在弃用 BC 提供商的一些功能。我正在使用 CMS 使用X509Certificate类型证书加密文本。但是,在 Android Pie 上,我遇到NoSuchAlgorithmException了前面 Google 帖子中提到的情况。

对于面向 Android P 或更高版本的应用,调用将抛出 NoSuchAlgorithmException。

要解决此问题,您应该停止指定提供程序并使用默认实现。

我还在这里检查了 Conscrypt 功能,但找不到对收到的文本执行 CMS 的方法。是否有任何其他替代方案可以帮助实现相同级别/类型的加密?

这是我的代码:

public byte[] encryptText(String txt) {

CMSEnvelopedDataStreamGenerator cmsdataGen = new CMSEnvelopedDataStreamGenerator();
cmsdataGen.addRecipientInfoGenerator(new JceKeyTransRecipientInfoGenerator(deviceCert).setProvider("BC"));
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
OutputStream out = cmsdataGen.open(byteArrayOutputStream, new JceCMSContentEncryptorBuilder(CMSAlgorithm.AES128_CBC).setProvider("BC").build());
byte[] unencryptedContent = txt.getBytes();
out.write(unencryptedContent);
String encrypted = byteArrayOutputStream.toString();
Log.v("Security","ENCRYPTED_STR BEFORE ENCODING= " + encrypted);
out.close();
return byteArrayOutputStream.toByteArray();

}

标签: javaandroidcryptographybouncycastlex509certificate

解决方案


推荐阅读