【问题标题】:JNI XOR Encryption Eclipse build errorJNI XOR 加密 Eclipse 构建错误
【发布时间】:2016-06-06 18:23:58
【问题描述】:

我想使用 JNI 对字节或字符数组进行 XOR 运算符。我使用字节或字符数组以及必须用于加密或解密的密钥来制作本机方法。对于单行异或,我无法在 Eclipse 中构建 C 文件,因为“空值不应被忽略”。 我添加了jchar *xor 来解决 void 错误,而不是我得到一个错误“无效使用 void 表达式” 我无法解决这个问题。这是我的 c 代码。

int
Java_packagename_classname_encryption(JNIEnv* env, jobject obj,
         jcharArray buffer,  jint offset,
         jint length,  jcharArray _key,  jint keylength){


        jint temp,i ;
        jint _keyByteIndex = 0;
        jcharArray xor[length]  ;


        for(i=0; i<length + offset; ++i){

            /*char temp = buffer[i];
            temp ^= _key[_keyByteIndex];
            buffer[i] = (char) temp;*/

            buffer[i] = (jchar) (buffer[i] ^ _key[_keyByteIndex]);

            if (_keyByteIndex + 1 >=keylength){
                _keyByteIndex = 0;
            }else{
                ++_keyByteIndex;
            }

        }

        return 0;
}

【问题讨论】:

  • jcharArray 不是您可以直接使用 [] 访问的数组。这是一个jobject,要访问实际的数组数据,您需要使用适当的JNI functions
  • @Michael 谢谢,但请您为我写单行代码,以便我理解。我学习 jni.h 但无法理解完美的语法。
  • 任何人都知道如何在 JNI C Native 代码中捕获异常我尝试使用简单的 try catch 但给出了许多错误,例如 :: - 'try' undeclared (first use in this function) - 每个未声明的标识符对于它出现的每个函数只报告一次 - 预期的';' '{' 标记之前 - 语句无效 'try' - 符号 'try' 无法解析 - 缺少 ';'
  • C 没有例外。你的意思是你想在你的 C 代码中捕获 Java 异常,那么你应该在我在第一条评论中链接到的页面上查找 ExceptionCheckExceptionClear

标签: android c eclipse encryption java-native-interface


【解决方案1】:

jcharArrayjarray 的 typedef,jobjectvoid* 的 typedef。可以是任何东西,也可以是伪装成空指针的独角兽。

您不能对 _key[_keyByteIndex] 使用取消引用。你必须使用(*env)-&gt;GetCharArrayElements,它会返回你想要的:jchar*

我建议你看看你正在使用的jni.h,它应该会给你所有你需要的答案。

【讨论】:

  • 感谢您的回复,请详细解释一下我都试过了。我没有更多的 exp.xor[i] = (*env)->GetCharArrayElements(env,buffer[i] ^ _key[_keyByteIndex]); //xor[i] = (*env)->GetCharArrayElements(env,buffer[i]) ^ (*env)->GetCharArrayElements(env,_key[_keyByteIndex]);错误:“方法 'GetCharArrayElements' 无法解析”
  • 检查您正在使用的jni.h 以获取正确的方法签名。
猜你喜欢
  • 1970-01-01
  • 2020-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-17
  • 1970-01-01
  • 1970-01-01
  • 2015-06-10
相关资源
最近更新 更多