来自于:Hello Bug.
一:前言
常用的文件加密算法有:DES、AES、RSA、SHA-1、MD5…..
.Net自带了安全类库,在System.Security.Cryptography下有一些常用的加密算法
其中MD5属于摘要算法,多用于检查文件是否有修改
二:加密算法介绍
——对称加密
对称加密算法有AES、DES、3DES等
在对称加密算法中,密钥只有一个,加密和解密都使用相同的密钥
——非对称加密
非对称加密算法有RSA、DSA、ECC等
在非对称加密算法中,需要两个密钥,一个公钥一个私钥
如果使用公钥对数据进行加密,只有使用对应的私钥才能进行解密,如果使用私钥对数据进行加密,只有使用对应的公钥才能进行解密
——签名加密算法(散列算法)
签名加密算法有SHA1、MD5、HMAC等
签名加密算法不需要密钥,一般不可逆
三:AES算法
需要注意的是加密后获得的bytes千万别用UTF8去获取字符串,不然会有信息损失,导致后面解密失败
using System;
using System.Security.Cryptography;
using System.Text;
/// <summary>
/// AES工具
/// </summary>
public class AESUtils
{
const string AES_KEY = "dhjkfhskajflwoxj"; //必须为32位,字母的话需要16个
/// <summary>
/// AES加密
/// </summary>
/// <param name="content">明文</param>
public static string Encrypt(string content)
{
if (string.IsNullOrEmpty(content))
{
return null;
}
byte[] contentBytes = Encoding.UTF8.GetBytes(content);
byte[] keyBytes = Encoding.UTF8.GetBytes(AES_KEY);
RijndaelManaged rm = new RijndaelManaged();
rm.Key = keyBytes;
rm.Mode = CipherMode.ECB;
rm.Padding = PaddingMode.PKCS7;
ICryptoTransform ict = rm.CreateEncryptor();
byte[] resultBytes = ict.TransformFinalBlock(contentBytes, 0, contentBytes.Length);
return Convert.ToBase64String(resultBytes, 0, resultBytes.Length);
}
/// <summary>
/// AES解密
/// </summary>
/// <param name="str">密文</param>
public static string Decrypt(string content)
{
if (string.IsNullOrEmpty(content))
{
return null;
}
byte[] contentBytes = Convert.FromBase64String(content);
byte[] keyBytes = Encoding.UTF8.GetBytes(AES_KEY);
RijndaelManaged rm = new RijndaelManaged();
rm.Key = keyBytes;
rm.Mode = CipherMode.ECB;
rm.Padding = PaddingMode.PKCS7;
ICryptoTransform ict = rm.CreateDecryptor();
byte[] resultBytes = ict.TransformFinalBlock(contentBytes, 0, contentBytes.Length);
return Encoding.UTF8.GetString(resultBytes);
}
}
四:DES算法
需要注意的是加密后获得的bytes千万别用UTF8去获取字符串,不然会有信息损失,导致后面解密失败
using System;
using System.Security.Cryptography;
using System.Text;
using System.IO;
using UnityEngine;
/// <summary>
/// DES工具
/// </summary>
public class DESUtils
{
public const string DES_KEY = "lhwyjlyy";
/// <summary>
/// DES加密
/// </summary>
/// <param name="content">明文</param>
public static string Encrypt(string content)
{
if (string.IsNullOrEmpty(content))
{
return null;
}
byte[] contentBytes = Encoding.UTF8.GetBytes(content);
byte[] keyBytes = Encoding.UTF8.GetBytes(DES_KEY);
DESCryptoServiceProvider provider = new DESCryptoServiceProvider();
provider.Key = keyBytes;
provider.IV = keyBytes;
MemoryStream ms = new MemoryStream();
CryptoStream cs = new CryptoStream(ms, provider.CreateEncryptor(), CryptoStreamMode.Write);
cs.Write(contentBytes, 0, contentBytes.Length);
cs.FlushFinalBlock();
return Convert.ToBase64String(ms.ToArray());
}
/// <summary>
/// DES解密
/// </summary>
/// <param name="content">密文</param>
public static string Decrypt(string content)
{
if (string.IsNullOrEmpty(content))
{
return null;
}
byte[] contentBytes = Convert.FromBase64String(content);
byte[] keyBytes = Encoding.UTF8.GetBytes(DES_KEY);
DESCryptoServiceProvider provider = new DESCryptoServiceProvider();
provider.Key = keyBytes;
provider.IV = keyBytes;
MemoryStream ms = new MemoryStream();
CryptoStream cs = new CryptoStream(ms, provider.CreateDecryptor(), CryptoStreamMode.Write);
cs.Write(contentBytes, 0, contentBytes.Length);
cs.FlushFinalBlock();
return Encoding.UTF8.GetString(ms.ToArray());
}
}