我试图解决在C++中训练的简单任务:异或加密/解密。但我的gamma()
函数无法正常工作。它会创建奇怪长度的结果字符串,比原始字符少或超过。我不明白,为什么。我试图将\0
添加到结果字符串的末尾,但它不起作用。C++异或加密/解密(异或密码)不适用于我
我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
。输出
例子:
source: 1234dfdfsd key: avsc234567 source(hex): 31 32 33 34 64 66 64 66 73 64 key(hex): 61 76 73 63 32 33 34 35 36 37 result (hex): 50 44 40 57 56 55 50 53 45 53 4D - length??? try to restore source: 1234dfdfsdM¶ try to restore source in hex: 31 32 33 34 64 66 64 66 73 64 4D 14
不能在空值终止字符串使用XOR,你需要单独保留的长度。 –
你期望看到什么作为输出? – SomeWittyUsername
我试过使用C++字符串,但是我看到一些错误,比如'52 \t 18 test.cpp \t [错误]没有匹配'operator ^'(操作数类型是'std :: string {aka std :: basic_string}'和'std :: string {aka std :: basic_string }')' @SomeWittyUsername 一串字节,可以解释为一串十六进制数字。他们的长度必须匹配原始文本的长度... –
WallOfBytes