【发布时间】:2020-03-14 19:26:29
【问题描述】:
以下代码可以正常工作,但我不希望在加密字符串中包含奇怪的字符,例如 '\x03'。如何做到这一点?
string XOR_Encryption(string toBeEncrypted, string sKey)
{
string sEncrypted(toBeEncrypted);
unsigned int iKey(sKey.length()), iIn(toBeEncrypted.length()), x(0);
for (unsigned int i = 0; i < iIn; i++)
{
sEncrypted[i] = toBeEncrypted[i] ^ sKey[x];
if (++x == iKey) { x = 0; }
}
return sEncrypted;
}
用法:
string message = "gbpi";
string Key("Q4s4R4t");
string encrypted_message = XOR_Encryption(message, Key);
cout << "encoded: " << encrypted_message << endl;
string decryptedMessage = XOR_Encryption(encrypted_message, Key);
cout << "decoded: " << decryptedMessage << endl;
【问题讨论】:
-
对输出的十六进制或base64进行编码。请注意,您必须在解密之前进行解码。
-
@kelalaka,谢谢。工作。
-
请写一个包含完整代码和一些解释的答案。我会投票...
-
作为替代方案,您可以尝试使用Vigenere 加密,它总是产生字母字符(或带有简单扩展名的字母数字)。优点是密文与明文长度相同,不像 Hex 或 Base64。
-
@kelalaka, "
Please write an answer that should contain full code and with some explanations. I'll upvote..." - 完成。
标签: c++ visual-studio encryption cryptography xor