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); } }
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); }