你能帮我理解这个C#代码吗?我没有任何C#编程经验(但我对Delphi,Pascal,C / C ++以及JS中的一点知识)
我可以看到此代码正在尝试加密某些 in.jpg 文件并将加密数据保存在 out.jpg 中。但我无法理解这种加密算法。
抱歉我的英文。
// Decompiled with JetBrains decompiler
using System;
using System.Collections.Generic;
using System.IO;
namespace ConsoleApplication2
{
internal class Program
{
private static void Encrypt(FileStream inFile, FileStream outFile)
{
BinaryReader binaryReader = new BinaryReader((Stream) inFile);
Dictionary<byte, byte> dictionary = new Dictionary<byte, byte>(256);
BinaryWriter binaryWriter = new BinaryWriter((Stream) outFile);
byte num1 = (byte) 0;
do
{
try
{
byte key = binaryReader.ReadByte();
if (!dictionary.ContainsKey(key))
dictionary.Add(key, num1++);
}
catch (ArgumentException ex)
{
}
catch (EndOfStreamException ex)
{
break;
}
}
while ((int) num1 <= (int) byte.MaxValue);
binaryReader.BaseStream.Position = 0L;
for (int index = 0; index < 256; ++index)
dictionary[(byte) index] = (byte) ((uint) (ushort) index ^ (uint) dictionary[(byte) index]);
byte num2 = (byte) 0;
while (true)
{
try
{
byte index = binaryReader.ReadByte();
byte num3 = (byte) ((uint) dictionary[index] + (uint) num2);
num2 = num3;
binaryWriter.Write(num3);
binaryWriter.Write((byte) ((uint) dictionary[index] ^ (uint) index));
}
catch (EndOfStreamException ex)
{
break;
}
}
binaryReader.Close();
binaryWriter.Close();
}
private static void Main(string[] args)
{
FileStream inFile = new FileStream("in.jpg", FileMode.Open, FileAccess.Read);
FileStream outFile = new FileStream("out.jpg", FileMode.Create, FileAccess.Write);
Program.Encrypt(inFile, outFile);
inFile.Close();
outFile.Close();
}
}
}
答案 0 :(得分:1)
这基本上是一回事:
static void Main(string[] args)
{
int b, i = 0;
var input = Console.OpenStandardInput();
var output = Console.OpenStandardOutput();
while ((b = input.ReadByte()) != -1)
{
output.WriteByte((byte)(b ^ i));
i++;
}
}
<强>用法:强>
Program.exe < inputfile > outputfile
运行一次以加密&#39;,再次在输出文件上运行以解密&#39;。
注意:这是 NOT 加密。
您可以将内容与diff
,comp
或您喜欢的差异工具进行比较。