Android 9及更高版本上的CMS加密

时间:2018-10-05 22:36:05

标签: java android cryptography bouncycastle x509certificate

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();

}

0 个答案:

没有答案