一、正常SO层校验框架
1、新建一个NativeC++项目
2、新建一个SignatureUtils类,里面写一个原生方法
package com.bucuo.ndk20211010; public class SignatureUtils { public static native String signatureparams(String param); }
3、在报错处按alt+enter,自动添加native层代码
extern "C" JNIEXPORT jstring JNICALL Java_com_bucuo_ndk20211010_SignatureUtils_signatureparams(JNIEnv *env, jclass clazz, jstring param) { const char *sparam=env->GetStringUTFChars(param,0);//将Java的String转为C的字符串 return env->NewStringUTF(sparam); }
4、java层调用
tv.setText(SignatureUtils.signatureparams("aiyoubucuo!!!"));
5、运行结果
6、对校验进行加盐操作
using namespace std; static const char* sigstr="aybc"; const char *sparam=env->GetStringUTFChars(param,0);//将Java的String转为C的字符串 string str(sparam); str.insert(0,sigstr); str=str.substr(0,str.length()-3); return env->NewStringUTF(str.c_str());
7、运行结果
二、加入MD5进行校验
1、导入md5.cpp及md5.h文件
2、实现md5
const char *sparam=env->GetStringUTFChars(param,0);//将Java的String转为C的字符串 string str(sparam); str.insert(0,sigstr); str=str.substr(0,str.length()-3); MD5_CTX context; MD5Init(&context); MD5Update(&context, (unsigned char *) str.c_str(), str.length()); unsigned char digest[16]; MD5Final(&context,digest); char md5_str[33]={0}; for(int i=0;i<16;i++){ sprintf(md5_str,"%s%02x",md5_str,digest[i]); } return env->NewStringUTF(md5_str); }
3、运行结果
禁止非法,后果自负