java - 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();
}
解决方案
推荐阅读
- arrays - 如何在 Swift 中的 if/else 语句中获取数据
- shopify - 有没有办法在shopify中获取另一个片段的设置值?
- firebase - Firebase 手机身份验证不适用于 Android 真实设备
- c++ - 如何将函数指针从一个类传递到 C++ 中的另一个函数
- python - Compute L2 distance with numpy using matrix multiplication
- javascript - jQuery / Javasript:更改 url 后运行代码
- reactjs - 在外部包中使用 Route 或 Link 时,React Router Invariant 失败
- php - 如何杀死在 Windows 后台运行的特定 cmd.exe 进程?
- java - 如何检查Java中多个变量中哪个变量不为空?
- r - 如何从r中的数据框制作相同的格式