gpt4 book ai didi

java - 为 Android 的 libcrypto.so 函数制作 JNI 包装器

转载 作者:行者123 更新时间:2023-11-30 11:36:07 28 4
gpt4 key购买 nike

首先我尝试使用 Cipher Class ,但由于性能我不得不放弃它。 Cipher Class产生大量实例,GC崩溃。另一种选择是使用 NDK,所以我设法构建了 openssl-android .现在,随着 libcrypto.so 和 libssl.so 的构建,我不知道如何将它们与我项目中的新 .c 文件链接,以制作我在 Java 端需要的加密函数的包装器。

这是 libcrypto.so 的功能,我需要:

void AES_cbc_encrypt(const unsigned char *in, unsigned char *out,
size_t length, const AES_KEY *key,
unsigned char *ivec, const int enc);

包装器将是这样的:Java 端:

public static native byte[] AESEncrypt(byte[] in, byte[] key, byte[] ivec, int enc);

native 包装器(带有共享库的 .c 文件端)

jbyteArray Java_com_myApp_Main_AESEncrypt(JNIEnv* env, jobject this, jbyteArray in, jbyteArray key, jbyteArray ivec, jint enc)

提前致谢,如果我的英语不是最好的,抱歉。

最佳答案

JavaCPP像这样的接口(interface) .java 文件应该可以解决问题:

@Platform(include="openssl/aes.h", link="crypto")
public class crypto {
static { Loader.load(); }
public static native void AES_cbc_encrypt(@Cast("unsigned char *") byte[] in,
@Cast("unsigned char *") byte[] out, @Cast("size_t") long length,
@Cast("const AES_KEY *") byte[] key, @Cast("unsigned char *") byte[] ivec, int enc);
}

我们可以将其包装到另一个静态方法中以匹配您所需的 API。

关于java - 为 Android 的 libcrypto.so 函数制作 JNI 包装器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14716580/

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