Example #1
0
        public void EncryptFile(string fileToEncodePath, string fileResultPath, string recieverPublicKeyFilePath)
        {
            var recieverPublicKey = ReadRsaKey(recieverPublicKeyFilePath);

            // генерим ключ для DES
            var desKeyBytes = new byte[9];

            _rand.GetBytes(desKeyBytes);
            desKeyBytes[desKeyBytes.Length - 1] = 0; // всегда неотрицательное
            var desKey = new BigInteger(desKeyBytes);

            // шифруем файл
            var bytesToEncrypt = File.ReadAllBytes(fileToEncodePath);
            var encryptedData  = DesFileEncoder.EncryptBytes(bytesToEncrypt, desKey.ToByteArray());

            // шифруем ключ DES
            var desKeyEncoded = BigInteger.ModPow(desKey, recieverPublicKey.Item1, recieverPublicKey.Item2);

            // пишем в файл
            using (var fs = new FileStream(fileResultPath, FileMode.Create))
                using (var bw = new BinaryWriter(fs))
                {
                    var desKeyEncodedBytes = desKeyEncoded.ToByteArray();
                    bw.Write(desKeyEncodedBytes.Length);
                    bw.Write(desKeyEncodedBytes);

                    bw.Write(encryptedData.Length);
                    bw.Write(encryptedData);
                }
        }
Example #2
0
        public void DecryptFile(string fileToDecrypt, string fileResultPath, string privateKeyOfReceiver)
        {
            var recieverPrivateKey = ReadRsaKey(privateKeyOfReceiver);

            byte[] desKeyBytes, encryptedDataBytes;
            using (var fs = new FileStream(fileToDecrypt, FileMode.Open))
                using (var bw = new BinaryReader(fs))
                {
                    var desKeyLength = bw.ReadInt32();
                    desKeyBytes = bw.ReadBytes(desKeyLength);

                    var encLength = bw.ReadInt32();
                    encryptedDataBytes = bw.ReadBytes(encLength);
                }

            // получили зашифрованный ключ DES
            var desKeyBytesForBigInt = new byte[desKeyBytes.Length + 1];

            desKeyBytes.CopyTo(desKeyBytesForBigInt, 0);
            var desKeyEncrypted = new BigInteger(desKeyBytesForBigInt);

            var desKeyDecrypted = BigInteger.ModPow(desKeyEncrypted, recieverPrivateKey.Item1, recieverPrivateKey.Item2).ToByteArray();
            var decryptedData   = DesFileEncoder.DecryptBytes(encryptedDataBytes, desKeyDecrypted);

            File.WriteAllBytes(fileResultPath, decryptedData);
        }