亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Java 到 C++ 異或加密失敗

Java 到 C++ 異或加密失敗

海綿寶寶撒 2021-08-25 17:21:16
今天,我嘗試將 xor 加密 java 代碼轉換為 c++ 但不起作用并輸出錯誤,也許我錯了,java 代碼:public static String encryptDecryptStr(String str) {    String key = "ABCDEF";    final int l0 = key.length() - 1;    int l1 = key.length() - 1;    final char[] strRemp = new char[str.length()];    char opcode = 85;;    for (int i = strRemp.length - 1; i >= 0; i--) {        strRemp[i] = (char) (str.charAt(i) ^ opcode ^ key.charAt(l1));        opcode = (char) ((char) (opcode ^ i ^ key.charAt(l1)) & 63);        --l1;        if (l1 < 0) l1 = l0;    }    return new String(strRemp);}我嘗試 C++ 代碼:JNIEXPORT jstring JNICALL Java_com_test_app_Utils_encryptDecryptStr(JNIEnv *env, jobject, jstring inStr){std::string in = env->GetStringUTFChars(inStr, NULL);std::string key = "ABCDEF";int l0 = static_cast<int>(key.size() - 1);int l1 = static_cast<int>(key.size() - 1);char *strRemp = new char[in.size()];char opcode = 85;for (int i = static_cast<int>(strlen(strRemp) - 1); i >= 0; i--) {    strRemp[i] = in[i] ^ opcode ^ key[l1];    opcode = static_cast<char >(static_cast<char >(opcode ^ i ^ key[l1]) & 63);    --l1;    if (l1 < 0) l1 = l0;}return (jstring)env->NewStringUTF(strRemp);}我測試:com.test.app.Utils.encryptDecryptStr(encryptDecryptStr("Hello World"));測試二:encryptDecryptStr(com.test.app.Utils.encryptDecryptStr("Hello World"));有人可以幫助我嗎?
查看完整描述

1 回答

?
達令說

TA貢獻1821條經驗 獲得超6個贊

  1. Java 和 C++ 是不同的語言。char在 Java 和charC++ 中是兩種不同的類型。

在 Java 中,您正在使用 2 字節的 UTF-16 編碼字符。在 C++ 中,您使用的是 1 字節字符,但它們實際上是多字節 UTF-8 編碼的。您必須確保使用相同的二進制數據。

  1. int i = static_cast<int>(strlen(strRemp) - 1)這是未定義的行為,因為您沒有正確地 0-terminated strRemp。你應該in.size()改用。

  2. std::string in = env->GetStringUTFChars(inStr, NULL);這會造成內存泄漏,因為std::string構造函數從 返回的 char* 數組中復制數據GetStringUTFChars,但該數組本身永遠不會被釋放。

  3. delete[] strRemp最后沒有,另一個內存泄漏。

  4. 您不應該使用strings此類二進制數據,因為字符串函數會將所有字節解析為他們認為字符串具有的任何編碼的字符,最好的情況是使您的代碼中斷,或者最壞的情況是引入嚴重的安全問題。而是使用原始二進制數據數組。


查看完整回答
反對 回復 2021-08-25
  • 1 回答
  • 0 關注
  • 166 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號