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

作者: 猪_队友 | 来源:发表于2018-04-02 21:59 被阅读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++不太熟练,很细节的地方,可能就坑很长时间。

    相关文章

      网友评论

      • kyriej2:大佬有jni方面教程吗
        猪_队友:@kyriej2 这个说实话,JNI主要是C/C++,教程可以看雷神的

      本文标题:NDK(2)最简单加解密字符串

      本文链接:https://www.haomeiwen.com/subject/lqdxhftx.html