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

有时候需要对一些字符串进行加密,但是又很容易被破解,所以用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++不太熟练,很细节的地方,可能就坑很长时间。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Android NDK是Android开发工具包的一部分,它允许开发者使用C或C++语言编写原生代码,以便实现更高效和更复杂的功能。而串口通信是一种通过串口接口实现数据传输的方式,常见于嵌入式系统和电子设备之间的通信。 Android NDK提供了对串口通信的支持,开发者可以使用JNI调用C或C++代码来实现串口通信功能。通过NDK的JNI接口,开发者可以调用已经封装好的串口库,或者自己编写串口通信的相关代码。在UE8B项目中,我利用Android NDK的编译器将C代码通过JNI接口与Java代码进行交互,成功实现了串口通信的功能。 在使用Android NDK进行串口通信时,需要先在NDK配置文件Android.mk中指定源文件路径、编译选项和目标库类型等。然后,使用Android Studio进行项目编译和构建。在Java代码中,通过调用JNI接口函数,可以实现与C或C++代码的交互,从而完成串口通信的功能。 对于串口通信,需要了解串口的相关知识,包括波特率、数据位、校验位、停止位等参数的设置。在具体的应用场景中,我们可以根据需要进行相应的串口设置。通过使用NDK的相关接口,我们可以在Android平台上实现串口通信功能,从而满足特定需求。 总之,Android NDK提供了一种使用C或C++语言在Android平台上实现串口通信功能的方法。通过JNI接口,我们可以将Java代码和C代码进行交互,从而实现更高效和更复杂的串口通信功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值