gpt4 book ai didi

c++ - 将 XOR 加密代码移植到 PHP

转载 作者:行者123 更新时间:2023-11-30 02:50:32 24 4
gpt4 key购买 nike

我通常会在这里的某个地方找到我的答案,但我一直无法从现有问题中找到解决方案。如果我在其他地方错过了答案,我深表歉意。

这是我的 C++ 代码:

    char key[4] = "abc";

for (int temp = 0; temp < original.size(); temp++){
encrypted += original[temp] ^ (int(key) + temp) % 255;
}
cout << int(key) << endl;
cout << "Encrypted data = " << encrypted << endl;

for (int temp = 0; temp < original.size(); temp++){
unencrypted += encrypted[temp] ^ (int(key) + temp) % 255;
}

cout << "Unencrypted data = " << unencrypted << endl;

返回一长串随机字符(例如♧)。

根据我的理解,我尝试将 XOR 加密转换为 PHP:

<?php
$input = "ONEWORD";
$encrypted = "";
$unencrypted = "";

$key = "abc";

$ascii = NULL;

for ($i = 0; $i < strlen($string); $i++)
{
$ascii += ord($string[$i]);
}


for($i = 0; $i < sizeof($input); $i++)
{
$encrypted+= $input[$i] ^ ($ascii + $i) % 255;
}
echo($encrypted);
echo(ord($key));

for($i = 0; $i < sizeof($input); $i++)
{
$unencrypted+= $encrypted[$i] ^ ($ascii + $i) % 255;
}

echo($unencrypted);
?>

虽然这会返回一个简单的 0970。我不太确定哪里出错了,谁能引导我朝着正确的方向前进?

谢谢

最佳答案

C++ 代码中的这一行是伪造的:

    encrypted += original[temp] ^ (int(key) + temp) % 255;

这并不像您想象的那样。 int(key)key 转换为 int。在此上下文中,key 将衰减为一个指针,因此您实际上根本没有获得 key ,您获得的是指向该 key 的指针的整数表示。

您可能想要的是:

    encrypted += char(original[temp] ^ key[temp % 3]);

这会将字符串的第一个字符与键的第一个字符异或,字符串的第二个字符与键的第二个字符异或,字符串的第三个字符与键的第三个字符异或。此后,它将循环遍历键中的三个字符,依次将它们应用于输入的每个字符。

您需要对解密代码进行类似的更改:

    unencrypted += char(encrypted[temp] ^ key[temp % 3]);

在 PHP 中,要处理单个字符值,您需要使用 ord 运算符将字符转换为整数,然后使用 chr 运算符将整数转换回整数到字符。

    $encrypted += chr( ord( $input[$i] ) ^ ord( $key[$i % 3] ) );

同样用于解密:

    $decrypted += chr( ord( $encrypted[$i] ) ^ ord( $key[$i % 3] ) );

关于c++ - 将 XOR 加密代码移植到 PHP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20414302/

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