Android 开发:使用 Native 层加密/解密 byte[] 数组示例
下面是一个示例代码,演示如何在 Android 开发中将 byte[] 数组传递到本地层进行加密和解密操作:
首先,在 Java 代码中定义一个本地方法,用于将 byte[] 数组传递到本地层:
public class NativeUtils {
static {
System.loadLibrary("native-lib");
}
public native byte[] encrypt(byte[] data);
public native byte[] decrypt(byte[] data);
}
然后,在 C++ 代码中实现这些本地方法:
#include <jni.h>
#include <string.h>
extern "C" {
JNIEXPORT jbyteArray JNICALL
Java_com_example_nativeutils_NativeUtils_encrypt(JNIEnv *env, jobject obj, jbyteArray data) {
jbyte *buffer = env->GetByteArrayElements(data, nullptr);
jsize length = env->GetArrayLength(data);
// 在这里对数据进行加密操作,这里只是简单地将每个字节加 1
for (int i = 0; i < length; i++) {
buffer[i]++;
}
jbyteArray result = env->NewByteArray(length);
env->SetByteArrayRegion(result, 0, length, buffer);
env->ReleaseByteArrayElements(data, buffer, 0);
return result;
}
JNIEXPORT jbyteArray JNICALL
Java_com_example_nativeutils_NativeUtils_decrypt(JNIEnv *env, jobject obj, jbyteArray data) {
jbyte *buffer = env->GetByteArrayElements(data, nullptr);
jsize length = env->GetArrayLength(data);
// 在这里对数据进行解密操作,这里只是简单地将每个字节减 1
for (int i = 0; i < length; i++) {
buffer[i]--;
}
jbyteArray result = env->NewByteArray(length);
env->SetByteArrayRegion(result, 0, length, buffer);
env->ReleaseByteArrayElements(data, buffer, 0);
return result;
}
}
最后,你可以在应用的 Java 代码中调用这些本地方法:
NativeUtils nativeUtils = new NativeUtils();
byte[] originalData = 'Hello, World!'.getBytes();
byte[] encryptedData = nativeUtils.encrypt(originalData);
byte[] decryptedData = nativeUtils.decrypt(encryptedData);
String decryptedString = new String(decryptedData);
System.out.println(decryptedString);
这个示例只是对传入的 byte[] 数组进行了简单的加密和解密操作,你可以根据自己的需求在 C++ 代码中实现更复杂的加密算法。
原文地址: https://www.cveoy.top/t/topic/p9vp 著作权归作者所有。请勿转载和采集!