gpt4 book ai didi

android - 如何解决 Android P 中的密码学更改?

转载 作者:太空宇宙 更新时间:2023-11-03 13:39:33 25 4
gpt4 key购买 nike

首先,我是第一次接触这个加密操作,我不知道我的问题是否合适!任何解决方案表示赞赏......

在我的项目中,我使用这段代码为服务创建 SSLSocketFactory:

  public static SSLSocketFactory getGlobalSSlFactory() {
try {
CertificateFactory cf = CertificateFactory.getInstance("X.509", "BC");
InputStream caInput = context.getResources().openRawResource(xxxxxxx);

Certificate ca = cf.generateCertificate(caInput);
caInput.close();

KeyStore keyStore = KeyStore.getInstance("BKS");
keyStore.load(null, null);

keyStore.setCertificateEntry("ca", ca);

String tmfAlgorithm = TrustManagerFactory.getDefaultAlgorithm();
TrustManagerFactory tmf = TrustManagerFactory.getInstance(tmfAlgorithm);
tmf.init(keyStore);

KeyManagerFactory kmf = KeyManagerFactory.getInstance(
KeyManagerFactory.getDefaultAlgorithm());
kmf.init(keyStore, "xxxxxxx".toCharArray());

final SSLContext sslContext = SSLContext.getInstance("TLS");
sslContext.init(null, tmf.getTrustManagers(), null);
return sslContext.getSocketFactory();
} catch (Exception e) {
e.printStackTrace();
return null;
}
}

在使用 android ( Pie ) 的设备上测试时出现的错误:

error

谷歌说:https://android-developers.googleblog.com/2018/03/cryptography-changes-in-android-p.html

重要部分:

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

我应该如何更改我的代码?

** 更多解释**

我按照@sonhvp 所说的做了,但是在测试之后出现了这个错误:

error in log

错误出现在这一行:

 Certificate ca = cf.generateCertificate(caInput);

这是我的安卓版本:

my android version

最佳答案

正如文档所说,“从 Android N 开始,我们不建议指定提供程序”。所以只需删除您的加密货币中的所有提供者。
在你的方法中

CertificateFactory cf = CertificateFactory.getInstance("X.509", "BC");

删除提供者(“BC”)

CertificateFactory cf = CertificateFactory.getInstance("X.509");

其他方法也可以。因为它没有指定提供者

KeyStore.getInstance("BKS"); //no provider
TrustManagerFactory.getInstance(tmfAlgorithm); //no provider
KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm()); //no provider
SSLContext.getInstance("TLS"); //no provider

原始文件夹中的证书文件有问题。我创建了一个证书文件并使用您的代码运行它没有任何问题。只需更改为 CertificateFactory.getInstance("X.509")。试试我的 cert file

public class Test {

public Test(AppCompatActivity activity) {
context = activity;
}

private Context context;

public SSLSocketFactory getGlobalSSlFactory() {
try {
CertificateFactory cf = CertificateFactory.getInstance("X.509");
InputStream caInput = context.getResources().openRawResource(R.raw.test);

Certificate ca = cf.generateCertificate(caInput);
caInput.close();

KeyStore keyStore = KeyStore.getInstance("BKS");
keyStore.load(null, null);

keyStore.setCertificateEntry("ca", ca);

String tmfAlgorithm = TrustManagerFactory.getDefaultAlgorithm();
TrustManagerFactory tmf = TrustManagerFactory.getInstance(tmfAlgorithm);
tmf.init(keyStore);

KeyManagerFactory kmf = KeyManagerFactory.getInstance(
KeyManagerFactory.getDefaultAlgorithm());
kmf.init(keyStore, "xxxxxxx".toCharArray());

final SSLContext sslContext = SSLContext.getInstance("TLS");
sslContext.init(null, tmf.getTrustManagers(), null);
return sslContext.getSocketFactory();
} catch (Exception e) {
e.printStackTrace();
return null;
}
}

}

我的 Activity

class MainActivity : AppCompatActivity() {

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)

val test = Test(this)
test.globalSSlFactory.createSocket()
}

}

关于android - 如何解决 Android P 中的密码学更改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56616156/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com