c - C 中 float 组的异或加密

标签 c encryption floating-point bit-manipulation xor

我想加密一个浮点型数组并使用相同的函数再次对其进行解码。我已经在网上阅读了一些帖子,但找不到让我满意的解决方案。 我尝试将浮点类型指针转换为 char* 并将结果与​​我的 char 类型 key 进行异或。 这是我的编码函数:

const char* key = "mykey";
int keylen = sizeof(key) / sizeof(key[0]);

void encodeData(float *data, int size)
{
    int bytes = (int)(sizeof(float)/sizeof(char));

    for(int i=0; i<size; i++)
    {
        for(int j=0; j<bytes; j++)
        {
            data[i] = *(((char *)&data[i]) + j) ^ (key[(bytes*i)%keylen]);
        }
    }
}

编译有效,但在编码和解码后我没有得到相同的结果。我做错了什么?

最佳答案

已修复:

void encodeData(float *data, int size) 
{ 
     int bytes = (int)(sizeof(float)/sizeof(char)); 
     char *tmp = (char *) data; 
     for(int i=0; i<bytes*size; i++) 
     { 
         *(tmp+i) = *(tmp+i) ^ key[i%keylen]; 
     } 
     data = (float*) tmp; 
 }

关于c - C 中 float 组的异或加密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39351383/

相关文章:

c++ - Microsoft Visual C++ 是否不使用带有 float 的 C/C++ 调用约定?

math - float 学坏了吗?

c - C 中字符串的 printf 的意外输出

c - 将服务器套接字绑定(bind)到端口失败 (C)

c - 体系结构 x86_64 的 undefined symbol 在 C 中意味着什么?

java - 图像文件的加密与解密

java - 如何为FPE(格式保留加密)函数编写java代码?

c - C 中 5 秒后停止 fgets

c# - 加密密码

c++ - OpenCL 结构体值在 CPU 上正确,但在 GPU 上不正确