Python 和 C++ 之间的 XOR
XOR between Python and C++
我编写了一个 Python 脚本 (Python v3.9) 来给我 XOR 加密字符串的小端输出。然后我尝试编写一个 C++ 程序,该程序将使用相同的 XOR 密钥解码这些字节。我的 Python 脚本如下。
import itertools
stringMessage = "TEST STRING !@#"
xorKey = "Hello324234523"
def xor(message, key):
toret = ''
for c, k in zip(message, itertools.cycle(key)):
toret += chr(ord(c) ^ ord(k))
return toret
encrypted = xor(stringMessage, xorKey)
print("".join("\x{:02x}".format(ord(c)) for c in encrypted))
最终结果是 \x1c\x20\x3f\x38\x4f\x60\x66\x66\x7b\x7d\x73\x15\x13\x73\x6b
,然后像这样手动复制到 C++ 源中..
char encryptedMessage[] = "\x1c\x20\x3f\x38\x4f\x60\x66\x66\x7b\x7d\x73\x15\x13\x73\x6b";
char xorKey[] = "Hello324234523";
char decryptedMessage[sizeof encryptedMessage];
int j = 0;
for (int i = 0; i < sizeof encryptedMessage; i++) {
if (j == sizeof xorKey - 1) j = 0;
decryptedMessage[i] = encryptedMessage[i] ^ xorKey[j];
j++;
}
printf("-------------------------\n");
printf(decryptedMessage);
但是当我编译并执行我的 C++ 程序时,我得到的不是 TEST STRING !@#
,而是 TEST STRING !@#e∟ ?8O`ff{}s§‼sk
。我不明白额外的 e∟ ?8O`ff{}s§‼sk
字符串是什么。
已将 for (int i = 0; i < sizeof shellcode; i++) {
更改为 for (int i = 0; i < sizeof shellcode - 1; i++) {
,现在可以使用了!
我编写了一个 Python 脚本 (Python v3.9) 来给我 XOR 加密字符串的小端输出。然后我尝试编写一个 C++ 程序,该程序将使用相同的 XOR 密钥解码这些字节。我的 Python 脚本如下。
import itertools
stringMessage = "TEST STRING !@#"
xorKey = "Hello324234523"
def xor(message, key):
toret = ''
for c, k in zip(message, itertools.cycle(key)):
toret += chr(ord(c) ^ ord(k))
return toret
encrypted = xor(stringMessage, xorKey)
print("".join("\x{:02x}".format(ord(c)) for c in encrypted))
最终结果是 \x1c\x20\x3f\x38\x4f\x60\x66\x66\x7b\x7d\x73\x15\x13\x73\x6b
,然后像这样手动复制到 C++ 源中..
char encryptedMessage[] = "\x1c\x20\x3f\x38\x4f\x60\x66\x66\x7b\x7d\x73\x15\x13\x73\x6b";
char xorKey[] = "Hello324234523";
char decryptedMessage[sizeof encryptedMessage];
int j = 0;
for (int i = 0; i < sizeof encryptedMessage; i++) {
if (j == sizeof xorKey - 1) j = 0;
decryptedMessage[i] = encryptedMessage[i] ^ xorKey[j];
j++;
}
printf("-------------------------\n");
printf(decryptedMessage);
但是当我编译并执行我的 C++ 程序时,我得到的不是 TEST STRING !@#
,而是 TEST STRING !@#e∟ ?8O`ff{}s§‼sk
。我不明白额外的 e∟ ?8O`ff{}s§‼sk
字符串是什么。
已将 for (int i = 0; i < sizeof shellcode; i++) {
更改为 for (int i = 0; i < sizeof shellcode - 1; i++) {
,现在可以使用了!