【发布时间】:2019-12-01 01:13:09
【问题描述】:
我正在尝试使用long 类型的数字来实现简单的异或加密。不幸的是,一些数字返回一些符号,解密它们会得到与输入的完全不同的文本。
例如,使用密钥 '5105105105' 加密文本 'hello world' 会返回此 '�????�'。要使用相同的密钥解密它,它会返回这个'>nl wor>nl'。我不确定它为什么要这样做。
这是我的代码:
string encDec(string str, long key) {
string output = str;
for (int i = 0; i < str.size(); i++)
output[i] = str[i] ^ key;
return output;
}
我在这里做错了什么?
【问题讨论】:
-
为什么不做一些调试并打印出循环中的中间值呢?也许通过查看整数值,它会告诉您错误是什么。在字符串中看到一堆哔哔声并不会给您(或我们)任何信息。
-
与您的问题有关,我看到的最大问题是键和值元素承载相同值的机会。问问自己,“
a ^ a总是会产生什么结果,以及它在看起来是字符串的情况下的效果如何?这种“加密”的结果至少应该是字节向量;而不是字符串。跨度> -
@WhozCraig 是的,结果不是字符串,但它可以放入
std::string中,这只是char元素的特殊向量类型。
标签: c++ encryption xor