gpt4 book ai didi

C++ XOR 加密/解密(异或密码)对我不起作用

转载 作者:行者123 更新时间:2023-11-30 05:19:58 24 4
gpt4 key购买 nike

我试图解决在 C++ 中进行训练的简单任务:异或加密/解密。但是我的 gamma() 函数不能正常工作。它创建具有奇怪长度的结果字符串,小于或大于原始长度。我不明白,为什么。我试图将 \0 添加到结果字符串的末尾,但它不起作用。

我的 gamma() 函数是

void gamma(char *s1, char *s2, char *res)
{
for (int i = 0; i < strlen(s1); i++) {
res[i] = s1[i] ^ s2[i];
}

我的原始字符串是char source[255] = "1234", key[255] = "avsc", result[255];

gamma()length=5 创建一个奇怪的字符串。

输出示例:

来源:1234dfdfsd
key :avsc234567
来源(十六进制):31 32 33 34 64 66 64 66 73 64
key (十六进制):61 76 73 63 32 33 34 35 36 37
结果(十六进制):50 44 40 57 56 55 50 53 45 53 4D - 长度???
尝试恢复源:1234dfdfsdM¶
尝试以十六进制恢复源代码:31 32 33 34 64 66 64 66 73 64 4D 14

最佳答案

使用char* 不是一个好主意或 std::string对于二进制数据,它假定保存零终止字符串的位置一样多。 (对于 std::string 实际上更好,但仍然存在一些问题),所以最好使用 std::vector<unsigned char>对于二进制数据:

typedef std::vector<uin8_t> data;
data gamma( const std::string &str, const std::string &key )
{
data r( str.length() );
for( size_t i = 0; i < str.length(); ++i )
r[i] = str[i] ^ key[i%key.length()];
return r;
}

关于C++ XOR 加密/解密(异或密码)对我不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40895747/

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