108 lines
4.0 KiB
C#
108 lines
4.0 KiB
C#
using System;
|
|
using System.IO;
|
|
using System.Security.Cryptography;
|
|
|
|
namespace Decode
|
|
{
|
|
class Program
|
|
{
|
|
static byte[] cryptoKey = new byte[] { 235, 7, 236, 58, 24, 225, 97, 102, 231, 1, 121, 12, 177, 145, 87, 200,
|
|
102, 85, 152, 73, 230, 203, 101, 169, 242, 213, 228, 219, 239, 157, 245, 156 };
|
|
|
|
static byte[] cryptoIV = new byte[] { 189, 23, 137, 56, 204, 241, 242, 118, 28, 89, 9, 198, 224, 111, 186, 125 };
|
|
|
|
static void Main(string[] args)
|
|
{
|
|
if ((args.Length < 1) || !File.Exists(args[0]))
|
|
{
|
|
Console.WriteLine("Usage: Decode <file>");
|
|
Console.ReadKey();
|
|
return;
|
|
}
|
|
|
|
string fileName = args[0];
|
|
|
|
try
|
|
{
|
|
using (StreamReader reader = new StreamReader(fileName))
|
|
{
|
|
if (reader.ReadLine().StartsWith("<?xml version="))
|
|
{
|
|
Console.WriteLine(string.Format("File {0} was not encrypted.", fileName));
|
|
Console.ReadKey();
|
|
return;
|
|
}
|
|
}
|
|
|
|
bool successful = false;
|
|
Stream stream = File.OpenRead(fileName);
|
|
using (BinaryReader binaryReader = new BinaryReader(stream))
|
|
{
|
|
int length = (int)(new FileInfo(fileName).Length);
|
|
|
|
/// Load encrypted binary data into an array
|
|
byte[] encrypted = new byte[length];
|
|
int bytesRead = binaryReader.Read(encrypted, 0, length);
|
|
if (bytesRead != length)
|
|
{
|
|
Console.WriteLine(string.Format("Failed to read file {0}.", fileName));
|
|
Console.ReadKey();
|
|
return;
|
|
}
|
|
|
|
using (RijndaelManaged myRijndael = new RijndaelManaged())
|
|
{
|
|
/// Create a decryptor to perform the stream transform.
|
|
ICryptoTransform decryptor = myRijndael.CreateDecryptor(cryptoKey, cryptoIV);
|
|
|
|
/// Create the streams used for decryption.
|
|
using (MemoryStream msDecrypt = new MemoryStream(encrypted))
|
|
{
|
|
using (CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read))
|
|
{
|
|
using (StreamReader srDecrypt = new StreamReader(csDecrypt))
|
|
{
|
|
using (TextWriter writer = new StreamWriter(fileName + ".plain"))
|
|
{
|
|
writer.Write(srDecrypt.ReadToEnd());
|
|
successful = true;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if (successful)
|
|
{
|
|
/// Decoding the file was successfuly completed => rotate files
|
|
if (File.Exists(fileName + ".bak")) File.Delete(fileName + ".bak");
|
|
File.Move(fileName, fileName + ".bak");
|
|
File.Move(fileName + ".plain", fileName);
|
|
return;
|
|
}
|
|
else
|
|
{
|
|
Failed(fileName);
|
|
return;
|
|
}
|
|
}
|
|
catch (Exception)
|
|
{
|
|
Failed(fileName);
|
|
return;
|
|
}
|
|
}
|
|
|
|
static void Failed(string fileName)
|
|
{
|
|
if (File.Exists(fileName + ".plain"))
|
|
{
|
|
File.Delete(fileName + ".plain");
|
|
}
|
|
Console.WriteLine(string.Format("Decoding file {0} failed.", fileName));
|
|
Console.ReadKey();
|
|
}
|
|
}
|
|
}
|