NDK(2)最も単純な復号文字列

2636 ワード

いくつかの文字列を暗号化する必要がある場合がありますが、解読されやすいので、ndkで暗号化すると、暗号化の安全性が向上し、解読のコストが増加します.2つの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++にはあまり熟練していないので、細かいところは、穴が長いかもしれません.