C#加密:DES加密


/// <summary>
/// .Net DES加密解密帮助类
/// </summary>
public class CryptoDESHelper
{
    /// <summary>
    /// Des默认密钥向量
    /// </summary>
    public static byte[] DesIv = { 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF };
    /// <summary>
    /// Des加解密钥必须8位
    /// </summary>
    public const string DesKey = "hansjcy2";
    /// <summary>
    /// 获取Des8位密钥
    /// </summary>
    /// <param name="key">Des密钥字符串</param>
    /// <returns>Des8位密钥</returns>
    static byte[] GetDesKey(string key)
    {
        if (string.IsNullOrEmpty(key))
        {
            throw new ArgumentNullException("key", "Des密钥不能为空");
        }
        if (key.Length > 8)
        {
            key = key.Substring(0, 8);
        }
        if (key.Length < 8)
        {
            // 不足8补全
            key = key.PadRight(8, '0');
        }
        return Encoding.UTF8.GetBytes(key);
    }
    /// <summary>
    /// Des加密
    /// </summary>
    /// <param name="source">源字符串</param>
    /// <param name="key">des密钥,长度必须8位</param>
    /// <param name="iv">密钥向量</param>
    /// <returns>加密后的字符串</returns>
    public static string EncryptDes(string source, string key, byte[] iv)
    {
        using (DESCryptoServiceProvider desProvider = new DESCryptoServiceProvider())
        {
            byte[] rgbKeys = GetDesKey(key),
                rgbIvs = iv,
                inputByteArray = Encoding.UTF8.GetBytes(source);
            using (MemoryStream memoryStream = new MemoryStream())
            {
                using (CryptoStream cryptoStream = new CryptoStream(memoryStream, desProvider.CreateEncryptor(rgbKeys, rgbIvs), CryptoStreamMode.Write))
                {
                    cryptoStream.Write(inputByteArray, 0, inputByteArray.Length);
                    cryptoStream.FlushFinalBlock();
                    // 1.第一种
                    return Convert.ToBase64String(memoryStream.ToArray());

                    // 2.第二种
                    //StringBuilder result = new StringBuilder();
                    //foreach (byte b in memoryStream.ToArray())
                    //{
                    //    result.AppendFormat("{0:X2}", b);
                    //}
                    //return result.ToString();
                }
            }
        }
    }
    /// <summary>
    /// Des解密
    /// </summary>
    /// <param name="source">源字符串</param>
    /// <param name="key">des密钥,长度必须8位</param>
    /// <param name="iv">密钥向量</param>
    /// <returns>解密后的字符串</returns>
    public static string DecryptDes(string source, string key, byte[] iv)
    {
        using (DESCryptoServiceProvider desProvider = new DESCryptoServiceProvider())
        {
            byte[] rgbKeys = GetDesKey(key),
                rgbIvs = iv,
                inputByteArray = Convert.FromBase64String(source);
            using (MemoryStream memoryStream = new MemoryStream())
            {
                using (CryptoStream cryptoStream = new CryptoStream(memoryStream, desProvider.CreateDecryptor(rgbKeys, rgbIvs), CryptoStreamMode.Write))
                {
                    cryptoStream.Write(inputByteArray, 0, inputByteArray.Length);
                    cryptoStream.FlushFinalBlock();
                    return Encoding.UTF8.GetString(memoryStream.ToArray());
                }
            }
        }
    }
}
GarsonZhang www.yesdotnet.com

 

版权声明:本文为YES开发框架网发布内容,转载请附上原文出处连接
YES开发框架
上一篇:C#加密:MD5加密
下一篇:C#加密:AES加密
评论列表

发表评论

评论内容
昵称:
关联文章

C#加密DES加密
C#加密:RSA加密解密
C#加密:SHA1
C#加密:AES加密
C#加密:MD5加密
C# RSA加密(私钥加密、公钥解密、密钥格式转换、支持超大长度分段加密)
文件加密技术研究
C#安全帮助类,提供MD5,AES加解密,SHA-1加密
.NET DLL反编译 .Net脱壳利器de4dot
.NET DLL加密代码混淆 Eziriz .NET Reactor
windows磁盘加密,文件夹加密,打开分区需要先输入密码
C#汉字转拼音
C# 数据库连接字符串Microsoft.Data.Sqlite数据库连接
C#和java对URL编码(UrlEncode)的差异
C# SQLServer数据库连接
C# List排序
C# 指针简单使用
C#邮件发送
C#计算工龄/年龄
C# 执行Javascript脚本

联系我们
联系电话:15090125178(微信同号)
电子邮箱:garson_zhang@163.com
站长微信二维码
微信二维码