【问题标题】:Encryption by matrix multiplication通过矩阵乘法加密
【发布时间】:2012-03-07 21:59:02
【问题描述】:

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

项目大纲是这样的;

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

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

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

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

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

所以--> 问题:

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

  2. 另外,这种方法在不同计算机上的可行性是什么 和平台? (我在想也许如果我从二进制转换 到 int 并在解密时转换回来,它可能会改变——不同 不同计算机上的大小分配等?)

另外,欢迎我对更好的解决方案提出意见

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

我的代码:

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)’

【问题讨论】:

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

标签: c++ encryption matrix binary cbc-mac


【解决方案1】:

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

【讨论】:

  • 感谢您的回复 :) 虽然我没有完全理解您所说的字节顺序是什么意思?
猜你喜欢
  • 2014-07-24
  • 1970-01-01
  • 1970-01-01
  • 2021-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-11
相关资源
最近更新 更多