0

我通过将证书安全地存储在 JNI 中并在运行时获取它来执行证书固定。但是BAD_PKCS12_DATA(pkcs8_x509.c:626), errno = 0)当我从 JNI 获取数据时我得到了。如果我直接在颤振代码中设置它,则固定工作虽然像 List<int> _crt = <int>[45, 45, 45, 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,45,45,45,45,...};
    jintArray ret = env->NewIntArray(sizeof(a));
    env->SetIntArrayRegion(ret, 0, 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 数组不起作用但如果我直接在颤振中设置它就没有问题?

4

1 回答 1

0

sizeof(a)不给你元素的数量a。它为您提供所有元素的总大小,以字节为单位。

你想要的是sizeof(a) / sizeof(int)or sizeof(a) / sizeof(a[0])

于 2020-09-24T10:33:57.990 回答