Android技术知识Android开发Android开发经验谈

NDK(2)最简单加解密字符串

2018-04-02  本文已影响37人  猪_队友

有时候需要对一些字符串进行加密,但是又很容易被破解,所以用ndk加密,可以提高加密的安全性,增加破译的成本。
声明两个native方法。

  //加密
    native String Encryption_str(String str);

    //解密
    native String Decrypt_str(String str);
extern "C"
JNIEXPORT jstring JNICALL
Java_com_ssy_ndkapplication_Main3Activity_Encryption_1str(JNIEnv *env, jobject instance,
                                                          jstring str_) {
   // char *str = Jstring2CStr(env,str_);
    char *str = (char *) env->GetStringUTFChars(str_, false);
    int length = strlen(str);
    for (int i = 0; i < length; i++) {
        *(str + i) += 1;
    }
//要及时释放
  env->ReleaseStringUTFChars(str_, str);
    return env->NewStringUTF(str);
}


extern "C"
JNIEXPORT jstring JNICALL
Java_com_ssy_ndkapplication_Main3Activity_Decrypt_1str(JNIEnv *env, jobject instance,
                                                       jstring str_) {
    char *str = (char *) env->GetStringUTFChars(str_, false);
    int length = strlen(str);
    for (int i = 0; i < length; i++) {
        *(str + i) -= 1;
    }
//要及时释放
    env->ReleaseStringUTFChars(str_, str);
    return env->NewStringUTF(str);
}

之前做这个的时候遇到一个坑,就是 处理字符串的问题,代码如下(这是复制出一个字符串进行操作的方法)

extern "C"
JNIEXPORT jstring JNICALL
Java_com_ssy_ndkapplication_Main3Activity_Encryption_1str(JNIEnv *env, jobject instance,
                                                          jstring str_) {
    char *str = (char *) env->GetStringUTFChars(str_, false);
    int len = strlen(str);
    char *mystr ;
    for (int i = 0; i < len; i++) {
        mystr[i] = *(str + i)+1;
    }
    env->ReleaseStringUTFChars(str_, str);
    jstring  jstring1 = env->NewStringUTF(mystr);
    free(mystr);
    mystr =NULL;
    return jstring1;
}

然后又更改

extern "C"
JNIEXPORT jstring JNICALL
Java_com_ssy_ndkapplication_Main3Activity_Encryption_1str(JNIEnv *env, jobject instance,
                                                          jstring str_) {
    char *str = (char *) env->GetStringUTFChars(str_, false);
    int len = strlen(str);
//动态申请内存
    char *mystr =(char *) malloc(len + 1);
    for (int i = 0; i < len; i++) {
        mystr[i] = *(str + i)+1;
//最后补位
        if(i==len-1){
          mystr[len]='\0';
        }
    }
  
    jstring  jstring1 = env->NewStringUTF(mystr);
//释放资源
  env->ReleaseStringUTFChars(str_, str);
    free(mystr);
    mystr =NULL;
    return jstring1;
}

总归还是对C/C++不太熟练,很细节的地方,可能就坑很长时间。

上一篇下一篇

猜你喜欢

热点阅读