Google announced今年已淘汰了BC提供程序的某些功能。我正在使用CMS使用X509Certificate
类型的证书对文本进行加密。但是,在Android Pie上,我遇到了NoSuchAlgorithmException
,如之前Google帖子中所述。
对于定位到Android P或更高版本的应用,通话将引发 NoSuchAlgorithmException。
要解决此问题,您应停止指定提供商,并使用 默认实现。
我还检查了Conscrypt功能here,但找不到对收到的文本执行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();
}