如何在C#中创建受密码保护的文件

这个问题有点补充,但没有办法相同。

如何创建受密码保护的文件?

加密:

private const int SaltSize = 8; public static void Encrypt( FileInfo targetFile, string password ) { var keyGenerator = new Rfc2898DeriveBytes( password, SaltSize ); var rijndael = Rijndael.Create(); // BlockSize, KeySize in bit --> divide by 8 rijndael.IV = keyGenerator.GetBytes( rijndael.BlockSize / 8 ); rijndael.Key = keyGenerator.GetBytes( rijndael.KeySize / 8 ); using( var fileStream = targetFile.Create() ) { // write random salt fileStream.Write( keyGenerator.Salt, 0, SaltSize ); using( var cryptoStream = new CryptoStream( fileStream, rijndael.CreateEncryptor(), CryptoStreamMode.Write ) ) { // write data } } } 

并解密:

 public static void Decrypt( FileInfo sourceFile, string password ) { // read salt var fileStream = sourceFile.OpenRead(); var salt = new byte[SaltSize]; fileStream.Read( salt, 0, SaltSize ); // initialize algorithm with salt var keyGenerator = new Rfc2898DeriveBytes( password, salt ); var rijndael = Rijndael.Create(); rijndael.IV = keyGenerator.GetBytes( rijndael.BlockSize / 8 ); rijndael.Key = keyGenerator.GetBytes( rijndael.KeySize / 8 ); // decrypt using( var cryptoStream = new CryptoStream( fileStream, rijndael.CreateDecryptor(), CryptoStreamMode.Read ) ) { // read data } } 

使用RijndaelManaged类进行加密,使用Rfc2898DeriveBytes生成加密密钥(和IV)。