【发布时间】:2012-03-07 21:59:02
【问题描述】:
从事基于简单矩阵乘法加密的大学项目。
项目大纲是这样的;
文本文件到矩阵乘以加密密钥矩阵= 加密文件。
加密文件到矩阵乘以密钥矩阵的逆 = 解密文件。
但我想更进一步,能够处理任何文件(文本、mp3、gif 等)。
我已经研究了好几个小时试图解决这个问题,现在开始有点沮丧。
我能想到的最好的(也是唯一的)方法是让程序读取原始二进制文件并对其执行加密。
所以--> 问题:
我可以从文件中提取原始二进制文件,放入矩阵,执行 矩阵乘法和(本质上)将二进制写回文件?
另外,这种方法在不同计算机上的可行性是什么 和平台? (我在想也许如果我从二进制转换 到 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