C++ 矩阵乘法加密

C++ 矩阵乘法加密,c++,encryption,matrix,binary,cbc-mac,C++,Encryption,Matrix,Binary,Cbc Mac,从事一个基于简单矩阵乘法加密的大学项目 项目大纲是这样的 文本文件到矩阵乘以加密密钥矩阵= 加密文件 加密文件到矩阵乘以密钥矩阵的逆 =已解密的文件 但我想更进一步,能够处理任何文件(文本、mp3、gif等) 我已经研究了几个小时试图解决这个问题,我开始有点沮丧 我能想到的最好的方法(也是唯一的方法)是让程序读取原始二进制文件并对其执行加密 因此-->问题: 我可以从文件中提取原始二进制文件,放入矩阵,执行 矩阵乘法和(本质上)将二进制文件写回文件? 这种方法在不同计算机上的可行性是什么 平台呢

从事一个基于简单矩阵乘法加密的大学项目

项目大纲是这样的

文本文件到矩阵乘以加密密钥矩阵= 加密文件

加密文件到矩阵乘以密钥矩阵的逆 =已解密的文件

但我想更进一步,能够处理任何文件(文本、mp3、gif等)

我已经研究了几个小时试图解决这个问题,我开始有点沮丧

我能想到的最好的方法(也是唯一的方法)是让程序读取原始二进制文件并对其执行加密

因此-->问题:

  • 我可以从文件中提取原始二进制文件,放入矩阵,执行 矩阵乘法和(本质上)将二进制文件写回文件?

  • 这种方法在不同计算机上的可行性是什么 平台呢?(我在想,如果我从二进制转换 要将int和on解密转换回,它可能会改变--不同 不同计算机上的大小分配等?

  • 此外,我欢迎大家就更好的解决方案发表意见

    --->但是基本算法应该是基于矩阵乘法的

    我的代码:

    int writetomatrix(int current_variable)
    {
        if (counter == 9){
            counter=0;
            b=0;
            a=0;}
    
        if (b==3) b=0;
        if (a==3) {b++;
                    a=0;}
        counter++;
        B[a][b]=current_variable;
        a++;
    
    }
        int main () {
            int *buffer= new int[1];
            ifstream input;
            input.open ("input.txt",ios::in|ios::binary);
            input.read ((char*)&buffer, 1);
            writetomatrix(buffer);
        }
    
    我得到的错误是:

    initializing argument 1 of ‘int writetomatrix(int)’
    

    您可以使用
    fread
    将二进制文件读取到char或int数组中。只要字节顺序保持不变,您就可以读取任何文件并将其写回。你可以用你读的字节或单词做你想做的事情。您可以使用
    sizeof
    来知道int的大小。在今天的大多数平台上,int的大小是4字节。

    一些(旧)版本的Unix
    crypt
    使用希尔密码,这与您描述的差不多。我还没有看过,但你可能很容易找到至少一个这样的实现的源代码。谢谢你的回答,但我想知道你是否可以像我说的那样进行二进制计算?简短的回答是“是”——你可以读取和操作二进制数据。通常,您会将其作为
    无符号字符的数组(或向量等)
    。再次感谢您的回复:),因此,如果我理解正确,您可以说——将一个无符号字符乘以另一个无符号字符?编辑:这将执行二进制乘法吗?是的--
    无符号字符
    只是一个小整数类型(通常范围为0..255)。你可以像其他整数类型一样对它进行数学运算(尽管它将首先转换为
    int
    ,因此你可能需要添加一个强制转换才能将结果返回到
    无符号字符
    )。谢谢你的回复:)尽管我不完全理解你所说的字节顺序是什么意思?