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

标签 c++ encryption xor

我试图解决在 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/

相关文章:

java - 在 JPanel 中添加 JPanel - 嵌套的 JPanel 不会显示

c++ - OpenCV中获取像素值

c++ - 我在 Qt Creator 中不断收到 "Undefined reference to WinMain@16"

c - 我应该如何用指针算术来解决这个密码?

c# - 编写 C# 代码以使用来自加密的 aspnet_regiis 功能

c++ - XOR 运算符在 C++ 中无法正确评估

functional-programming - lambda 演算异或表达式由真假

c++ - 使用 Boost.Log 的 channel 层次结构进行严重性和接收器过滤

c++ - 从 ifstream 读取符号两次

encryption - 在 GO 中使用 RSA-SHA 进行签名和解码