Пример #1
0
        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);
        }
Пример #3
0
        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();
        }