Я пытался создать для себя dll, в которой был указан класс, который криптографически называется «Криптография». При разработке и тестировании метода (то есть, это был не dll, а метод), он работал нормально, не повреждая ничего, но теперь для некоторых странностей.причины, по которым метод делает что-то странное с моими данными (в данном случае это текстовый файл), вот оригинальный текст:
line1 testing testing testing
line2 testing testing testing
line3 testing testing testing
line4 testing testing testing
, а вот результат после шифрования и дешифрования:
wš0åmŦI%1ˆìµsting testing
line2 testing testing testing
line3 testing testing testing
line4 testing testing testing
а вот два метода:
public static void EncryptFile(string inputFile, string outputFile)
{
try
{
StackFrame frame = new StackFrame(1);
var method = frame.GetMethod();
var type = method.DeclaringType;
//var name = method.Name;
//var assembly = typeof(Crypto).Assembly;
//var attribute = (GuidAttribute)assembly.GetCustomAttributes(typeof(GuidAttribute), true)[0];
var id = type.GUID.ToString();
StringBuilder sb = new StringBuilder(id);
var Code = sb.Replace("-", "").ToString();
UnicodeEncoding UE = new UnicodeEncoding();
ASCIIEncoding AsciieEncoding = new ASCIIEncoding();
byte[] key = AsciieEncoding.GetBytes(Code);
string cryptFile = outputFile;
FileStream fsCrypt = new FileStream(cryptFile, FileMode.Create);
RijndaelManaged RMCrypto = new RijndaelManaged();
RMCrypto.GenerateIV();
byte[] IV = RMCrypto.IV;
RMCrypto.Padding = PaddingMode.ISO10126;
CryptoStream cs = new CryptoStream(fsCrypt,
RMCrypto.CreateEncryptor(key, IV),
CryptoStreamMode.Write);
FileStream fsIn = new FileStream(inputFile, FileMode.Open);
int data;
while ((data = fsIn.ReadByte()) != -1)
cs.WriteByte((byte)data);
fsIn.Close();
cs.Close();
fsCrypt.Close();
RegistryKey Regkey = Registry.LocalMachine.OpenSubKey("Software", true);
Regkey.CreateSubKey("HBH");
Regkey = Regkey.OpenSubKey("HBH", true);
Regkey.CreateSubKey("Data");
Regkey = Regkey.OpenSubKey("Data", true);
long longIV = BitConverter.ToInt64(IV, 0);
Regkey.SetValue("Data", longIV);
Console.WriteLine("Encryption Succeeded !");
}
catch (Exception ex)
{
Console.WriteLine("Encryption failed! Error");
Console.WriteLine("Do you Want to see the error message ? (y/n)");
string Response = Console.ReadLine();
if (Response == "y" || Response == "Y")
{
Console.WriteLine(ex.Message);
Console.ReadLine();
Application.Exit();
}
else
{
Application.Exit();
}
}
}
и вот метод расшифровки:
public static void DecryptFile(string inputFile, string outputFile)
{
try
{
StackFrame frame = new StackFrame(1);
var method = frame.GetMethod();
var type = method.DeclaringType;
var id = type.GUID.ToString();
//var assembly = typeof(Crypto).Assembly;
//var attribute = (GuidAttribute)assembly.GetCustomAttributes(typeof(GuidAttribute), true)[0];
//var id = attribute.Value;
StringBuilder sb = new StringBuilder(id);
var Code = sb.Replace("-", "").ToString();
ASCIIEncoding AsciiEncoding = new ASCIIEncoding();
byte[] key = AsciiEncoding.GetBytes(Code);
RegistryKey Regkey = Registry.LocalMachine.OpenSubKey("Software", true);
Regkey.OpenSubKey("HBH");
Regkey = Regkey.OpenSubKey("HBH", true);
Regkey.OpenSubKey("Data");
Regkey = Regkey.OpenSubKey("Data", true);
byte[] IV = Regkey.GetValue("Data") as byte[];
FileStream fsCrypt = new FileStream(inputFile, FileMode.Open);
RijndaelManaged RMCrypto = new RijndaelManaged();
RMCrypto.Padding = PaddingMode.ISO10126;
CryptoStream cs = new CryptoStream(fsCrypt,
RMCrypto.CreateDecryptor(key, IV),
CryptoStreamMode.Read);
FileStream fsOut = new FileStream(outputFile, FileMode.Create);
cs.Flush();
int data;
while ((data = cs.ReadByte()) != -1)
fsOut.WriteByte((byte)data);
fsOut.Close();
cs.Close();
fsCrypt.Close();
Console.WriteLine("Decryption Succeeded !");
}
catch (Exception ex)
{
Console.WriteLine("Decryption failed! Error");
Console.WriteLine("Do you Want to see the error message ? (y/n)");
string Response = Console.ReadLine();
if (Response == "y" || Response == "Y")
{
Console.WriteLine(ex.Message +"at line :" + ex.StackTrace);
Console.ReadLine();
Application.Exit();
}
else
{
Application.Exit();
}
}
}