如何解决将SSL证书bye []数组从jni带到flutter
我正在通过将证书安全地存储在JNI中并在运行时获取证书来使证书固定。但是当我从JNI获取数据时,我得到了BAD_PKCS12_DATA(pkcs8_x509.c:626),errno = 0)
。如果我直接在flutter代码中设置它,则固定会起作用
List<int> _crt = <int>[45,45,66,69,71,73,78,...]
这是JNI方法:
extern "C" JNIEXPORT jintArray JNICALL Java_com_package_android_MainActivity_getCert
(JNIEnv *env,jobject This)
{
int a[] ={45,...};
jintArray ret = env->NewIntArray(sizeof(a));
env->SetIntArrayRegion(ret,6,a);
return ret;
}
MainActivity.kt:
external fun getCert(): IntArray
override fun configureFlutterEngine(@NonNull flutterEngine: FlutterEngine) {
super.configureFlutterEngine(flutterEngine)
MethodChannel(flutterEngine.dartExecutor.binaryMessenger,CHANNEL).setMethodCallHandler {
call,result ->
if (call.method == "cert") {
result.success(getCert())
}
}
}
颤振代码:
List<int> _crt;
_crt = await _platform.invokeMethod("cert");
//print("CRT: " + _crt.length);
SecurityContext context = SecurityContext(withTrustedRoots: true);
context.setTrustedCertificatesBytes(_crt);
httpClient = new HttpClient(context: context);
我很困惑,为什么从JNI返回的int数组不起作用,但是如果直接在flutter中直接设置它,也不会有问题?
解决方法
sizeof(a)
不能提供a
中元素的数量。它提供了所有元素的总大小,以字节为单位。
您想要的是sizeof(a) / sizeof(int)
或sizeof(a) / sizeof(a[0])
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。