Des加密:对称可逆加密(公钥加密算法);
1.对称加密:含有一个加/解密钥(同一个密钥),在消息发送前使用密钥对消息进行加密,在对方收到消息之后,使用相同的密钥进行解密;
2.非对称加密:加密和解密使用不同的密钥的一类加密算法。这类加密算法通常有两个密钥A和B,使用密钥A加密数据得到的密文,只有密钥B可以进;
代码如下:using System;
using System.IO;
using System.Security.Cryptography;
namespace Common.Helper.Crypto
{
/// <summary>
/// Des加密解密-对称可逆加密
/// DES,全称Data Encryption Standard,是一种对称加密算法。
/// 应用:文件传输,数据传输,加密速度快,秘钥是安全问题
/// </summary>
public static class DesCrypto
{
/// <summary>
/// 检验密钥和向量是否有效长度【8】
/// </summary>
/// <param name="key">密钥</param>
/// <returns>bool</returns>
private static bool CheckKeyOrIv(string key,string iv)
{
if (string.IsNullOrWhiteSpace(key) || string.IsNullOrWhiteSpace(iv))
return false;
if (8.Equals(key.Length) && iv.Length.Equals(key.Length))
return true;
else
return false;
}
/// <summary>
/// 加密
/// </summary>
/// <param name="palinData">明文</param>
/// <param name="key">密钥:8位长度</param>
/// <param name="iv">向量:8位长度</param>
/// <param name="encodingType">编码方式</param>
/// <returns>密文</returns>
public static string Encrypt(string palinData, string key, string iv, EncodingStrOrByte.EncodingType encodingType = EncodingStrOrByte.EncodingType.UTF8)
{
if (string.IsNullOrWhiteSpace(palinData)) return null;
if (!CheckKeyOrIv(key,iv)) return palinData;
using (DESCryptoServiceProvider sp = new DESCryptoServiceProvider { Key = EncodingStrOrByte.GetBytes(key, encodingType), IV = EncodingStrOrByte.GetBytes(iv, encodingType) })
{
using (ICryptoTransform ct = sp.CreateEncryptor())
{
byte[] bytes = EncodingStrOrByte.GetBytes(palinData, encodingType);
using (var ms = new MemoryStream())
{
using (var cs = new CryptoStream(ms, ct,CryptoStreamMode.Write))
{
cs.Write(bytes, 0, bytes.Length);
cs.FlushFinalBlock();
}
return Convert.ToBase64String(ms.ToArray());
}
}
}
}
/// <summary>
/// 解密
/// </summary>
/// <param name="encryptedData">密文</param>
/// <param name="key">密钥:8位长度</param>
/// <param name="iv">向量:8位长度</param>
/// <param name="encodingType">编码方式</param>
/// <returns>明文</returns>
public static string Decrypt(string encryptedData, string key, string iv, EncodingStrOrByte.EncodingType encodingType = EncodingStrOrByte.EncodingType.UTF8)
{
if (string.IsNullOrWhiteSpace(encryptedData)) return null;
if (!CheckKeyOrIv(key, iv)) return encryptedData;
using (DESCryptoServiceProvider sp = new DESCryptoServiceProvider { Key = EncodingStrOrByte.GetBytes(key, encodingType), IV = EncodingStrOrByte.GetBytes(iv, encodingType) })
{
using (ICryptoTransform ct = sp.CreateDecryptor())
{
byte[] bytes = Convert.FromBase64String(encryptedData);
using (var ms = new MemoryStream())
{
using (var cs = new CryptoStream(ms, ct, CryptoStreamMode.Write))
{
cs.Write(bytes, 0, bytes.Length);
cs.FlushFinalBlock();
}
return EncodingStrOrByte.GetString(ms.ToArray(), encodingType);
}
}
}
}
}
}
编码处理类:同上Rsa加密解密;注:加/解密密钥和向量均为8位长度。