我做了一个简单的文件二进制加密/解密,它适用于任何文本文档。 但是当我加密和解密图像/ word文档文件时,文件损坏了。 我不明白为什么会这样。
这是获取文件字节数组的代码。
byte[] b = null;
using (System.IO.FileStream fr = new System.IO.FileStream(this.txtFile.Text, System.IO.FileMode.Open))
{
using (System.IO.BinaryReader br = new System.IO.BinaryReader(fr))
{
b = br.ReadBytes((int)fr.Length);
}
}
这就是我写回所有字节的方式。
System.IO.File.WriteAllBytes(filepath, b);
有人可以向我解释原因吗?
编辑:这是我的加密/解密代码。 对不起,如果它凌乱,我是加密的新手。
for (int i = 0; i < b.Length; i++)
{
if (keyIndex >= key.Length)
{
keyIndex = 0;
}
string fileBIN = Convert.ToString(b[i], 2);
string keyBIN = Convert.ToString(Convert.ToInt32(Convert.ToChar(key[keyIndex])), 2);
string newBIN = string.Empty;
keyIndex += 1;
if (fileBIN.Length > keyBIN.Length)
{
for (int x = 0; x < Math.Abs(fileBIN.Length - keyBIN.Length); x++) { keyBIN = "0" + keyBIN; x -= 1; }
}
else
{
for (int x = 0; x < Math.Abs(fileBIN.Length - keyBIN.Length); x++) { fileBIN = "0" + fileBIN; x -= 1; }
}
if (fileBIN == keyBIN)
{
newBIN = fileBIN;
}
else
{
for (int x = 0; x < fileBIN.Length; x++)
{
if (fileBIN.Substring(x, 1).ToString() == keyBIN.Substring(x, 1).ToString()) { newBIN += "0"; }
else { newBIN += "1"; }
}
}
b[i] = Convert.ToByte(newBIN, 2);
}