public static void Encrypt(ImageViewModel image, string OutFilePath, string password) { int len; byte[] buffer = new byte[4096]; string originalImagePath = image.AbsoluteMasterPath; using (FileStream outfs = new FileStream(OutFilePath, FileMode.Create, FileAccess.Write)) { using (AesManaged aes = new AesManaged()) { aes.BlockSize = 128; aes.KeySize = 128; aes.Mode = CipherMode.CBC; aes.Padding = PaddingMode.PKCS7; Rfc2898DeriveBytes deriveBytes = new Rfc2898DeriveBytes(password, 16); byte[] salt = new byte[16]; salt = deriveBytes.Salt; byte[] bufferKey = deriveBytes.GetBytes(16); aes.Key = bufferKey; aes.GenerateIV(); ICryptoTransform encryptor = aes.CreateEncryptor(aes.Key, aes.IV); using (CryptoStream cse = new CryptoStream(outfs, encryptor, CryptoStreamMode.Write)) { outfs.Write(salt, 0, 16); outfs.Write(aes.IV, 0, 16); using (FileStream fs = new FileStream(originalImagePath, FileMode.Open, FileAccess.Read)) { while ((len = fs.Read(buffer, 0, 4096)) > 0) { cse.Write(buffer, 0, len); } } } } } EncryptImage encryptImage = new EncryptImage(); encryptImage.ID = Guid.NewGuid(); encryptImage.TargetImageID = image.ID; encryptImage.EncryptFilePath = OutFilePath; EncryptImageDao dao = new EncryptImageDao(); dao.InsertOrReplace(encryptImage); }