gpt4 book ai didi

Java 到 C++ 异或加密失败

转载 作者:行者123 更新时间:2023-11-27 23:44:04 25 4
gpt4 key购买 nike

今天,我尝试将 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. Java 和 C++ 是不同的语言。 char在 Java 和 char在 C++ 中是两种不同的类型。

在 Java 中,您使用的是 2 字节的 UTF-16 编码字符。在 C++ 中,您使用的是 1 字节字符,但它们实际上是多字节 UTF-8 编码的。 (另请参阅 docs for GetStringUTFChars。)您必须确保您使用的是相同的二进制数据。

  1. int i = static_cast<int>(strlen(strRemp) - 1)这是未定义的行为,因为您没有正确地以 0 终止 strRemp .你应该使用 in.size()相反。

  2. std::string in = env->GetStringUTFChars(inStr, NULL);这会造成内存泄漏,因为 std::string构造函数从 GetStringUTFChars 返回的 char* 数组中复制数据,但该数组本身永远不会被释放。

  3. 你没有delete[] strRemp最后,另一个内存泄漏。

  4. 你不应该使用 strings对于此类二进制数据,字符串函数会将所有字节解析为他们认为字符串具有的任何编码中的字符,从而使您的代码在最好的情况下中断或在最坏的情况下引入严重的安全问题。改为使用原始二进制数据数组。

关于Java 到 C++ 异或加密失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52136705/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com