对一个字符串进行加密所需的步骤如下:
1.将源字符串转换成一个字节数组
2.初始化一个加密算法类
3.使用这个加密算法类来生成一个加密者(encryptor对象),实现IcryptoTransform接口。他需要密钥和IV值。
4.使用加密者对象来初始化一个密文数据流(CryptoStream对象)。该数据流还需要知道你要加密哪些数据,以及用来写入加密数据的目标数据流。
5.使用这个密文数据流生成已加密数据,并写到由前面创建的源字节数组创建的目标内存数据流中。
6.获取存储在这个数据流中的字节数据。
7.将这些字节数据转换成一个字符串。
解密采用的模式与加密类似:
1.将源字符串转换成一个字节数组。
2.根据这个字节数组填充内存数据流的值。
3.初始化一个加密算法类。
4.使用加密算法类生成一个解密者(decryptor对象),实现ICrytoTransform接口。他需要密钥和IV值。
5.使用解密者对象来初始化一个密文数据流(CryptoStream对象)。该数据流还需要知道你要解密什么数据,并需要一个从中读取已加密数据的源数据流。
6.使用密文数据流来读取已解密数据(可以使用StreamReader.ReadToEnd方法来获取字符串类型结果)。
代码示例:
namespace SecurityLib
{
/// <summary>
///StringEncryptor 的摘要说明
/// </summary>
public static class StringEncryptor
{
public static string Encrypt(string sourceData)
{
byte[] key = new byte[] { 1, 2, 3, 4, 5, 6, 7, 8 };
byte[] iv = new byte[] { 1, 2, 3, 4, 5, 6, 7, 8 };
try
{
byte[] sourceDataBytes = System.Text.ASCIIEncoding.ASCII.GetBytes(sourceData);
MemoryStream tempStream = new MemoryStream();
DESCryptoServiceProvider encryptor = new DESCryptoServiceProvider();
CryptoStream encryptionStream = new CryptoStream(tempStream,
encryptor.CreateEncryptor(key, iv), CryptoStreamMode.Write);
encryptionStream.Write(sourceDataBytes, 0, sourceDataBytes.Length);
encryptionStream.FlushFinalBlock();
byte[] encryptedDataBytes = tempStream.GetBuffer();
return Convert.ToBase64String(encryptedDataBytes, 0, (int)tempStream.Length);
}
catch
{
throw new StringEncryptorException("Unable to encrypt data.");
}
}
public static string Decrypt(string sourceData)
{
byte[] key = new byte[] { 1, 2, 3, 4, 5, 6, 7, 8 };
byte[] iv = new byte[] { 1, 2, 3, 4, 5, 6, 7, 8 };
try
{
byte[] encryptedDataBytes = Convert.FromBase64String(sourceData);
MemoryStream tempStream = new MemoryStream(encryptedDataBytes, 0, encryptedDataBytes.Length);
DESCryptoServiceProvider decryptor = new DESCryptoServiceProvider();
CryptoStream decryptionStream = new CryptoStream(tempStream,
decryptor.CreateDecryptor(key, iv), CryptoStreamMode.Read);
StreamReader allDataReader = new StreamReader(decryptionStream);
return allDataReader.ReadToEnd();
}
catch
{
throw new StringEncryptorException("Unable to decrypt data.");
}
}
}
}
浙公网安备 33010602011771号