非常感谢您对C#常用字符串加密解密方法封装代码的关注。下面为您详细介绍如何实现该功能。
1. 基本概念
在介绍具体的代码实现之前,首先需要了解一些基本概念。
1.1 加密和解密
加密是指将原始的明文数据通过一定的算法转换为密文,以达到防止信息泄露的目的;而解密则是指将密文数据还原回原始的明文数据。
1.2 对称加密和非对称加密
对称加密是指加密和解密使用同一把密钥的加密方式,常用的对称加密算法有DES、3DES和AES等;而非对称加密则是指加密和解密使用不同的密钥,常用的非对称加密算法有RSA和ECC等。
1.3 哈希算法
哈希算法是将任意长度的消息压缩到固定长度的摘要的一种算法,通常称为哈希值。哈希算法是单向的,即不能通过哈希值还原出原始的消息。常用的哈希算法有SHA1、SHA256和MD5等。
2. 实现代码
在了解了基本概念之后,我们可以开始介绍如何实现C#常用字符串加密解密方法封装代码。
2.1 MD5加密
MD5加密是一种哈希算法加密方式,具有不可逆性。可以使用以下代码实现该功能:
using System.Security.Cryptography;
using System.Text;
public static string EncryptMD5(string input)
{
if (string.IsNullOrEmpty(input))
{
return string.Empty;
}
using (var md5 = MD5.Create())
{
var buffer = Encoding.UTF8.GetBytes(input);
var result = md5.ComputeHash(buffer);
var builder = new StringBuilder();
for (var i = 0; i < result.Length; i++)
{
builder.Append(result[i].ToString("x2"));
}
return builder.ToString();
}
}
该代码中,我们使用了.NET Framework自带的MD5类。首先将字符串转换为字节数组,然后计算MD5值,最后将MD5值转换为16进制字符串(这里使用的是小写字母)并返回。
例如,我们可以使用以下代码对字符串"123456"进行加密:
var input = "123456";
var md5 = EncryptMD5(input);
Console.WriteLine(md5); // 输出结果:e10adc3949ba59abbe56e057f20f883e
2.2 AES加密和解密
AES加密和解密是一种对称加密算法,需要使用同一把密钥进行加密和解密。可以使用以下代码实现该功能:
using System;
using System.IO;
using System.Security.Cryptography;
using System.Text;
public static string EncryptAES(string input, string key)
{
if (string.IsNullOrEmpty(input) || string.IsNullOrEmpty(key))
{
return string.Empty;
}
var buffer = Encoding.UTF8.GetBytes(input);
var iv = Encoding.UTF8.GetBytes(key.Substring(0, 16));
using (var aes = Aes.Create())
{
aes.Key = Encoding.UTF8.GetBytes(key);
aes.IV = iv;
using (var encryptor = aes.CreateEncryptor())
{
using (var memoryStream = new MemoryStream())
{
using (var cryptoStream = new CryptoStream(memoryStream, encryptor, CryptoStreamMode.Write))
{
cryptoStream.Write(buffer, 0, buffer.Length);
cryptoStream.FlushFinalBlock();
return Convert.ToBase64String(memoryStream.ToArray());
}
}
}
}
}
public static string DecryptAES(string input, string key)
{
if (string.IsNullOrEmpty(input) || string.IsNullOrEmpty(key))
{
return string.Empty;
}
var buffer = Convert.FromBase64String(input);
var iv = Encoding.UTF8.GetBytes(key.Substring(0, 16));
using (var aes = Aes.Create())
{
aes.Key = Encoding.UTF8.GetBytes(key);
aes.IV = iv;
using (var decryptor = aes.CreateDecryptor())
{
using (var memoryStream = new MemoryStream())
{
using (var cryptoStream = new CryptoStream(memoryStream, decryptor, CryptoStreamMode.Write))
{
cryptoStream.Write(buffer, 0, buffer.Length);
cryptoStream.FlushFinalBlock();
return Encoding.UTF8.GetString(memoryStream.ToArray());
}
}
}
}
}
该代码中,我们使用了.NET Framework自带的Aes类。首先将字符串和密钥转换为字节数组,然后使用Aes类来创建加密和解密器,最后将加密或解密后的字节数组转换为字符串并返回。
例如,我们可以使用以下代码对字符串"Hello, world!"进行加密和解密:
var input = "Hello, world!";
var key = "1234567890123456";
var encrypted = EncryptAES(input, key);
Console.WriteLine(encrypted); // 输出结果:HJMiBdldmqnsOGtXJeW0DQ==
var decrypted = DecryptAES(encrypted, key);
Console.WriteLine(decrypted); // 输出结果:Hello, world!
3. 总结
经过以上的介绍,相信您已经了解了C#常用字符串加密解密方法封装代码的基本实现方式。不同的加密方式有不同的实现方式,需要根据实际情况进行选择。希望本文能够为您提供帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#常用字符串加密解密方法封装代码 - Python技术站