private byte[] salt = ASCIIEncoding.ASCII.GetBytes("SaltString");
private const int DESKeySize = 8; // The key for DES must be 8 bytes.
/// <summary>
/// Generates a Rfc key.
/// </summary>
/// <param name="input">The string used to derive the key.</param>
/// <param name="salt">The key salt used to derive the key.</param>
/// <param name="keySize">The number of key bytes to generate.</param>
/// <returns>A byte array filled with key bytes.</returns>
private static byte[] GenerateKey(string input, byte[] salt, int keySize)
{
Rfc2898DeriveBytes rfcKey = new Rfc2898DeriveBytes(input, salt);
return rfcKey.GetBytes(keySize);
}
/// <summary>
/// Creates a DES encryptor.
/// </summary>
/// <param name="input">The string to use for DES algorithm.</param>
/// <returns>A DES encryptor object.</returns>
public static ICryptoTransform CreateEncryptor(string input)
{
ICryptoTransform transform = null;
using (DESCryptoServiceProvider des = new DESCryptoServiceProvider())
{
des.Key = GenerateKey(input, iv, DESKeySize);
transform = des.CreateEncryptor(des.Key, iv);
}
return transform;
}
/// <summary>
/// Creates a DES decryptor.
/// </summary>
/// <param name="privateKey">The string to use for DES algorithm.</param>
/// <returns>A DES decryptor object.</returns>
public static ICryptoTransform CreateDecryptor(string input)
{
ICryptoTransform transform = null;
using (DESCryptoServiceProvider des = new DESCryptoServiceProvider())
{
des.Key = GenerateKey(input, iv, DESKeySize);
transform = des.CreateDecryptor(des.Key, iv);
}
return transform;
}
public static void Serialize(string fileName, DataCache dataCache)
{
using (Stream innerStream = File.Create(fileName))
using (Stream cryptoStream = new CryptoStream(innerStream, CreateEncryptor(fileName), CryptoStreamMode.Write))
{
BinaryFormatter formatter = new BinaryFormatter();
formatter.Serialize(cryptoStream, dataCache);
}
}
public static DataCache DeSerialize(string fileName)
{
if (!File.Exists(fileName))
return null;
using (Stream innerStream = File.Open(filePath, FileMode.Open))
using (Stream cryptoStream = new CryptoStream(innerStream, CreateDecryptor(fileName), CryptoStreamMode.Read))
{
BinaryFormatter formatter = new BinaryFormatter();
DataCache dataCache = (DataCache)formatter.Deserialize(cryptoStream);
return dataCache;
}
}
Encrypt/decrypt when serialize/deserialize data
最新推荐文章于 2019-06-14 15:14:39 发布