当涉及到信息安全时,加密是必不可少的一个环节。在C#中,有许多不同的加密算法,如对称加密算法(如DES、3DES、AES)、非对称加密算法(如RSA)、摘要算法(如MD5、SHA256)等等。接下来我们分别探究这些算法的使用方法。
对称加密算法
对称加密算法使用同一把密钥用于加密和解密信息。因此,密钥的保护尤为重要。
DES加密算法
DES全称为数据加密标准,是一种对称加密算法,最初在1977年被美国国家标准局采用,使用56位密钥,对于当今计算机的计算能力而言,DES的安全性已经不太足够。
在C#中,可以使用System.Security.Cryptography命名空间下的DESCryptoServiceProvider类来实现DES加解密。
using System.Security.Cryptography;
public static byte[] EncryptDES(string plainText, byte[] key, byte[] iv)
{
byte[] encryptedData;
using (DESCryptoServiceProvider des = new DESCryptoServiceProvider())
{
des.Key = key;
des.IV = iv;
ICryptoTransform encryptor = des.CreateEncryptor();
byte[] rawData = Encoding.UTF8.GetBytes(plainText);
encryptedData = encryptor.TransformFinalBlock(rawData, 0, rawData.Length);
}
return encryptedData;
}
public static string DecryptDES(byte[] cipherData, byte[] key, byte[] iv)
{
string decryptedData;
using (DESCryptoServiceProvider des = new DESCryptoServiceProvider())
{
des.Key = key;
des.IV = iv;
ICryptoTransform decryptor = des.CreateDecryptor();
byte[] rawData = decryptor.TransformFinalBlock(cipherData, 0, cipherData.Length);
decryptedData = Encoding.UTF8.GetString(rawData);
}
return decryptedData;
}
AES加密算法
AES全称为高级加密标准,是一种对称加密算法,与DES相比,它使用更长的密钥(128位、192位或256位),且加解密效率更高,安全性更好。
在C#中,同样可以使用System.Security.Cryptography命名空间下的AesCryptoServiceProvider类来实现AES加解密。
using System.Security.Cryptography;
public static byte[] EncryptAES(string plainText, byte[] key, byte[] iv)
{
byte[] encryptedData;
using (AesCryptoServiceProvider aes = new AesCryptoServiceProvider())
{
aes.Key = key;
aes.IV = iv;
ICryptoTransform encryptor = aes.CreateEncryptor();
byte[] rawData = Encoding.UTF8.GetBytes(plainText);
encryptedData = encryptor.TransformFinalBlock(rawData, 0, rawData.Length);
}
return encryptedData;
}
public static string DecryptAES(byte[] cipherData, byte[] key, byte[] iv)
{
string decryptedData;
using (AesCryptoServiceProvider aes = new AesCryptoServiceProvider())
{
aes.Key = key;
aes.IV = iv;
ICryptoTransform decryptor = aes.CreateDecryptor();
byte[] rawData = decryptor.TransformFinalBlock(cipherData, 0, cipherData.Length);
decryptedData = Encoding.UTF8.GetString(rawData);
}
return decryptedData;
}
非对称加密算法
非对称加密算法使用一对密钥,公钥用于加密信息,而私钥用于解密信息。在这里,私钥通常保存在服务器等相对安全的地方,而公钥可以发送给任何需要加密信息的人。
RSA加密算法
RSA是一种基于因数分解难题的非对称加密算法,1996年被提出。在其最初设计时,RSA的密钥长度要足够长才能确保安全。在现代计算机的处理能力下,密钥长度为2048位或更长是一种比较安全的选择。
在C#中,同样可以使用System.Security.Cryptography命名空间下的RSA类来实现RSA加解密。
using System.Security.Cryptography;
public static byte[] EncryptRSA(string plainText, string publicKeyXml)
{
byte[] encryptedData;
using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider())
{
rsa.FromXmlString(publicKeyXml);
byte[] rawData = Encoding.UTF8.GetBytes(plainText);
encryptedData = rsa.Encrypt(rawData, false); // false表示不使用OAEP填充
}
return encryptedData;
}
public static string DecryptRSA(byte[] cipherData, string privateKeyXml)
{
string decryptedData;
using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider())
{
rsa.FromXmlString(privateKeyXml);
byte[] rawData = rsa.Decrypt(cipherData, false); // false表示不使用OAEP填充
decryptedData = Encoding.UTF8.GetString(rawData);
}
return decryptedData;
}
摘要算法
摘要算法是一种单向函数,它将任何消息转换为数字指纹,用于验证消息完整性。常用的摘要算法包括MD5和SHA系列。
MD5
MD5是一种摘要算法,用于将任意长度的数据映射为128位的摘要。尽管MD5很常用,但它已经不被认为是安全的了。
在C#中,可以使用System.Security.Cryptography命名空间下的MD5类来实现MD5摘要的生成。
using System.Security.Cryptography;
public static string ComputeMD5(string rawData)
{
byte[] data = Encoding.UTF8.GetBytes(rawData);
using (MD5 md5 = new MD5CryptoServiceProvider())
{
byte[] hash = md5.ComputeHash(data);
StringBuilder hex = new StringBuilder(hash.Length * 2);
foreach (byte b in hash)
{
hex.AppendFormat("{0:x2}", b);
}
return hex.ToString();
}
}
SHA256
SHA256是一种摘要算法,用于将任意长度的数据映射为256位的摘要。对于大多数情况下的数据,SHA系列摘要算法是一个更安全的选择。
在C#中,同样可以使用System.Security.Cryptography命名空间下的SHA256类来实现SHA256摘要的生成。
using System.Security.Cryptography;
public static string ComputeSHA256(string rawData)
{
byte[] data = Encoding.UTF8.GetBytes(rawData);
using (SHA256 sha256 = new SHA256CryptoServiceProvider())
{
byte[] hash = sha256.ComputeHash(data);
StringBuilder hex = new StringBuilder(hash.Length * 2);
foreach (byte b in hash)
{
hex.AppendFormat("{0:x2}", b);
}
return hex.ToString();
}
}
以上就是关于C#中常用的加密算法的介绍和实现方法。其实还有很多其他的加密算法,可以根据不同的需求进行选择。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#中的那些常用加密算法 - Python技术站