public static HelperClasses.Envelope Read_Envelope(string file) { var streamReader = new StreamReader(Program.Direktorij + file); string currentLine; var envelope = new HelperClasses.Envelope(); while (streamReader.ReadLine() != "Envelope data:") { } while ((currentLine = streamReader.ReadLine()) != "") { envelope.Data += currentLine?.Substring(4); } while (streamReader.ReadLine() != "Envelope crypt key:") { } while ((currentLine = streamReader.ReadLine()) != "---END OS2 CRYPTO DATA---" && currentLine != "") { envelope.Key += currentLine?.Substring(4); } streamReader.Close(); return(envelope); }
public static void CreateDigitalEnvelope(string textFile, string RSApublicKey, string outputFile, EncryptionMode mode, SymetricAlgorithm algorithm, KeySize keySize) { var envelope = new HelperClasses.Envelope(); var text = FileManager.ReadFile_Byte(textFile); var vector = FileManager.ReadFile_IVector("IVector.txt"); byte[] cryptedText; byte[] key; if (algorithm == SymetricAlgorithm.THREE_DES) { key = HelperFunctions.GenerateKey((int)keySize); cryptedText = THREE_DES.Encrypt(text, key, mode); } else { key = HelperFunctions.GenerateKey((int)keySize); cryptedText = AES.Encrypt(text, key, vector, mode); } var keyHex = HelperFunctions.FromByteToHex(key); var publicKey = FileManager.Read_RSAKey(RSApublicKey); var RSAcrypted = RSA.Encrypt(keyHex, publicKey.Modulus, publicKey.Exponent); var cryptedKey = Convert.FromBase64String(RSAcrypted); RSAcrypted = HelperFunctions.FromByteToHex(cryptedKey); envelope.Data = Convert.ToBase64String(cryptedText); envelope.Key = RSAcrypted; FileManager.Write_Envelope(outputFile, envelope, key.Length * 8, publicKey.Modulus.Length * 4, algorithm); }
public static void Write_Envelope(string file, HelperClasses.Envelope envelope, int symetricAlgorithmKeyLenght, int RSAKeyLength, SymetricAlgorithm algorithm) { var streamWriter = new StreamWriter(Program.Direktorij + file); streamWriter.WriteLine("---BEGIN OS 2 CRYPTO DATA---"); streamWriter.WriteLine(); streamWriter.WriteLine("Description"); streamWriter.WriteLine(" Envelope"); streamWriter.WriteLine(); streamWriter.WriteLine("File name:"); var breadCrumbs = file.Split('\\'); streamWriter.WriteLine(" " + breadCrumbs[breadCrumbs.Length - 1]); streamWriter.WriteLine(); streamWriter.WriteLine("Method:"); streamWriter.WriteLine(algorithm == SymetricAlgorithm.AES ? " AES" : " 3DES"); streamWriter.WriteLine(" RSA"); streamWriter.WriteLine(); streamWriter.WriteLine("Key length:"); streamWriter.WriteLine(" " + HelperFunctions.FromIntToHex(symetricAlgorithmKeyLenght)); streamWriter.WriteLine(" " + HelperFunctions.FromIntToHex(RSAKeyLength)); streamWriter.WriteLine(); streamWriter.WriteLine("Envelope data:"); var NumLines = (double)envelope.Data.Length / 60; if (Math.Truncate(NumLines) < NumLines) { NumLines++; } for (var i = 0; i < Math.Truncate(NumLines); i++) { if (envelope.Data.Length - i * 60 < 60) { streamWriter.WriteLine(" " + envelope.Data.Substring(i * 60, envelope.Data.Length - i * 60)); } else { streamWriter.WriteLine(" " + envelope.Data.Substring(i * 60, 60)); } } streamWriter.WriteLine(); streamWriter.WriteLine("Envelope crypt key:"); NumLines = (double)envelope.Key.Length / 60; if (Math.Truncate(NumLines) < NumLines) { NumLines++; } for (var i = 0; i < Math.Truncate(NumLines); i++) { if (envelope.Key.Length - i * 60 < 60) { streamWriter.WriteLine(" " + envelope.Key.Substring(i * 60, envelope.Key.Length - i * 60)); } else { streamWriter.WriteLine(" " + envelope.Key.Substring(i * 60, 60)); } } streamWriter.WriteLine(); streamWriter.WriteLine("---END OS2 CRYPTO DATA---"); streamWriter.Close(); }