A bit complementary to, but no way the same as, this question.
How to create a password protected file?
You can, on a POSIX system, use fcntl() along with the F_SETLK value for the command argument, and then set F_WRLCK (i.e, and exclusive lock) in the struct flock data-member l_type .
Use encryption to password protect a folder or a file Right-click on the item, click Properties, then click Advanced. Check Encrypt contents to secure data. Click OK, then click Apply. Windows then asks if you want to encrypt only the file or its parent folder and all the files within that as well.
encrypt:
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
}
}
}
and decrypt:
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
}
}
Use the RijndaelManaged class for encryption and Rfc2898DeriveBytes to generate the key (and IV) for the crypto.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With