我試圖解決在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