返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C#加解密之DES算法的实现
  • 693
分享到

C#加解密之DES算法的实现

2024-04-02 19:04:59 693人浏览 薄情痞子
摘要

目录前言实现功能开发环境实现代码实现效果前言 说完了对称加密中的AES,这一篇再来介绍下DES。 加解密原理什么的就不介绍了,大家可以自行百度(主要我也不太明白,也不需要太明白),大

前言

说完了对称加密中的AES,这一篇再来介绍下DES。

加解密原理什么的就不介绍了,大家可以自行百度(主要我也不太明白,也不需要太明白),大致说一下两者的区别吧!

  • 首先肯定是加密算法的不同,嗯,这一句完全是废话,不同的加密方式算法肯定不会一样。
  • AES比DES的运算速度更快。
  • AES比DES破解难度高,相对比较安全

代码实现的话其实AES和DES的写法是基本差不多的,但是这里有一个参数问题还是需要提一下。在上一篇AES中我们有介绍过密钥长度只能是16、24、32;在DES中的话,密钥(Key)的长度是8(由于密钥的长度问题,所以这里如果使用暴力破解的话,还是有很高的概率可以还原数据),有向量(IV)的话,长度一般也是8;然后就是在AES中我们采用的是Rijndael,在这里我们换成DESCryptoServiceProvider;两个加密的实现代码主要就是这里的不同,其他基本一模一样,所以稍微改一下即可。

实现功能

使用DES加密方式加解密文本数据

开发环境

开发工具:Visual Studio 2013

.net Framework版本:4.5

实现代码

 public class DesUtil
    {
        /// <summary>
        /// DES加密
        /// </summary>
        /// <param name="desModel"></param>
        /// <returns></returns>
        public static byte[] Encrypt(DesModel desModel)
        {
            //使用8位密钥
            byte[] key8 = new byte[8];
            //如果我们的密钥不是8为,则自动补全到8位
            byte[] byteKey = Encoding.UTF8.GetBytes(desModel.Key.PadRight(key8.Length));
            //复制密钥
            Array.Copy(byteKey, key8, key8.Length);

            //使用8位向量
            byte[] iv8 = new byte[8];
            //如果我们的向量不是8为,则自动补全到8位
            byte[] byteIv = Encoding.UTF8.GetBytes(desModel.IV.PadRight(iv8.Length));
            //复制向量
            Array.Copy(byteIv, iv8, iv8.Length);

            // 创建加密对象
            DESCryptoServiceProvider desProvider = new DESCryptoServiceProvider();
            desProvider.Mode = desModel.Mode;
            desProvider.Padding = desModel.Padding;
            desProvider.Key = key8;
            desProvider.IV = iv8;
            byte[] result = null;
            try
            {
                using (MemoryStream ms = new MemoryStream())
                {
                    using (CryptoStream EncryptStream = new CryptoStream(ms, desProvider.CreateEncryptor(), CryptoStreamMode.Write))
                    {
                        EncryptStream.Write(desModel.Data, 0, desModel.Data.Length);
                        EncryptStream.FlushFinalBlock();
                        result = ms.ToArray();
                    }
                }
            }
            catch { }
            return result;
        }

        /// <summary>
        /// DES解密
        /// </summary>
        /// <param name="desModel"></param>
        /// <returns></returns>
        public static byte[] Decrypt(DesModel desModel)
        {
            //使用8位密钥
            byte[] key8 = new byte[8];
            //如果我们的密钥不是8为,则自动补全到8位
            byte[] byteKey = Encoding.UTF8.GetBytes(desModel.Key.PadRight(key8.Length));
            //复制密钥
            Array.Copy(byteKey, key8, key8.Length);

            //使用8位向量
            byte[] iv8 = new byte[8];
            //如果我们的向量不是8为,则自动补全到8位
            byte[] byteIv = Encoding.UTF8.GetBytes(desModel.IV.PadRight(iv8.Length));
            //复制向量
            Array.Copy(byteIv, iv8, iv8.Length);

            // 创建解密对象
            DESCryptoServiceProvider desProvider = new DESCryptoServiceProvider();
            desProvider.Mode = desModel.Mode;
            desProvider.Padding = desModel.Padding;
            desProvider.Key = key8;
            desProvider.IV = iv8;
            byte[] result = null;
            try
            {
                using (MemoryStream ms = new MemoryStream(desModel.Data))
                {
                    using (CryptoStream DecryptStream = new CryptoStream(ms, desProvider.CreateDecryptor(), CryptoStreamMode.Read))
                    {
                        using (MemoryStream msResult = new MemoryStream())
                        {
                            byte[] temp = new byte[1024 * 1024];
                            int len = 0;
                            while ((len = DecryptStream.Read(temp, 0, temp.Length)) > 0)
                            {
                                msResult.Write(temp, 0, len);
                            }

                            result = msResult.ToArray();
                        }
                    }
                }
            }
            catch { }
            return result;
        }

        /// <summary>
        /// DES加密字符串
        /// </summary>
        /// <param name="data"></param>
        /// <param name="key"></param>
        /// <param name="iv"></param>
        /// <returns></returns>
        public static string Encrypt(string data, string key, string iv = "")
        {
            byte[] bytes = Encoding.UTF8.GetBytes(data);
            byte[] result = Encrypt(new DesModel
            {
                Data = bytes,
                Key = key,
                IV = iv,
                Mode = CipherMode.CBC,
                Padding = PaddingMode.PKCS7
            });
            if (result == null)
            {
                return "";
            }
            return Convert.ToBase64String(result);
        }

        /// <summary>
        /// DES解密字符串
        /// </summary>
        /// <param name="data"></param>
        /// <param name="key"></param>
        /// <param name="iv"></param>
        /// <returns></returns>
        public static string Decrypt(string data, string key, string iv = "")
        {
            byte[] bytes = Convert.FromBase64String(data);
            byte[] result = Decrypt(new DesModel
            {
                Data = bytes,
                Key = key,
                IV = iv,
                Mode = CipherMode.CBC,
                Padding = PaddingMode.PKCS7
            });
            if (result == null)
            {
                return "";
            }
            return Encoding.UTF8.GetString(result);
        }


        public class DesModel
        {
            /// <summary>
            /// 需要加密/解密的数据
            /// </summary>
            public byte[] Data { get; set; }

            /// <summary>
            /// 密钥
            /// </summary>
            public string Key { get; set; }

            /// <summary>
            /// 向量
            /// </summary>
            public string IV { get; set; }

            /// <summary>
            /// 加密模式
            /// </summary>
            public CipherMode Mode { get; set; }

            /// <summary>
            /// 填充模式
            /// </summary>
            public PaddingMode Padding { get; set; }
        }
    }
 private void btn_Des_Encrypt_Click(object sender, EventArgs e)
        {
            string result = DesUtil.Encrypt(textBox1.Text, "12345678900987654321");
            textBox2.Text = result;
        }

        private void btn_Des_Decrypt_Click(object sender, EventArgs e)
        {
            string result = DesUtil.Decrypt(textBox2.Text, "12345678900987654321");
            textBox1.Text = result;

        }

实现效果

以上就是C#加解密之DES算法的实现的详细内容,更多关于C# DES算法的资料请关注编程网其它相关文章!

--结束END--

本文标题: C#加解密之DES算法的实现

本文链接: https://lsjlt.com/news/165754.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • C#加解密之DES算法的实现
    目录前言实现功能开发环境实现代码实现效果前言 说完了对称加密中的AES,这一篇再来介绍下DES。 加解密原理什么的就不介绍了,大家可以自行百度(主要我也不太明白,也不需要太明白),大...
    99+
    2024-04-02
  • java实现的DES加密算法详解
    本文实例讲述了java实现的DES加密算法。分享给大家供大家参考,具体如下:一、DES加密算法介绍要求密钥必须是8个字节,即64bit长度因为密钥是byte[8] , 代表字符串也可以是非可见的字节,可以与Base64编码算法一起使用加密、...
    99+
    2023-05-31
    java des 加密算法
  • 如何理解C#DES加密解密的实现
    这篇文章将为大家详细讲解有关如何理解C#DES加密解密的实现,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。C# DES加密解密的实现,DES算法为密码体制中的对称密码体制,由IBM公司研制的...
    99+
    2023-06-17
  • C#加解密之AES算法的实现
    目录实现功能开发环境实现代码实现效果从这一篇开始呢,写一下常用的一些加解密方式。一般我们来说呢,对于加密,我们分为可逆和不可逆。可逆加密又可分为对称加密(AES、DES等)和非对称加...
    99+
    2024-04-02
  • 详解DES加密算法的原理与Java实现
    目录DES加密算法DES加密原理DES 加密算法Java实现前面阿粉说了关于 MD5 加密算法,还有 RSA 加密算法的实现,以及他们的前世今生,今天阿粉在来说一下这个关于 DES ...
    99+
    2022-11-13
    Java DES加密算法 Java DES加密 Java DES
  • c语言如何实现DES加密解密
    目录c语言实现DES加密解密C语言DES加密解密的认识以及解密出现乱码的分析Des加密Des加密模式填充方式保证加密解密的一致性 python中的des加密总结c语言实现DES加密解...
    99+
    2023-05-18
    c语言DES c语言加密解密 DES加密解密
  • Java实现与JS相同的Des加解密算法完整实例
    本文实例讲述了Java实现与JS相同的Des加解密算法。分享给大家供大家参考,具体如下:这里演示java与js实现相同的des加解密算法,不多说,不废话,直接上代码一、java实现package com.lyz.base.des;impor...
    99+
    2023-05-30
    java js des
  • Android数据加密之Des加密详解
    Android DES加密的相关实现,简单的实现了一下,今天来总结一下: DES加密介绍: DES是一种对称加密算法,所谓对称加密算法即:加密和解密使用相同密钥的算法。DES...
    99+
    2022-06-06
    加密 des加密 des Android
  • Node.js DES加密的简单实现
    常见的加密算法基本分为这几类,1 :线性散列算法、2:对称性加密算法、3、非对称性加密算法 (记记记) 线性散列算法(签名算法):MD5,SHA1,HMAC 比如MD5:即Message-Digest Al...
    99+
    2022-06-04
    简单 Node js
  • DES算法的python3实现
    DES原理 这里不予以复述, 有很多优秀的博客 原理可以参考这篇博客 https://www.cnblogs.com/songwenlong/p/5944139.html 1. 主函数框架 DES 函数 传入参数为 tex...
    99+
    2023-01-31
    算法 DES
  • VB.NET如何实现DES加密
    这篇文章主要介绍了VB.NET如何实现DES加密,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。VB.NET DES加密代码:Imports System ...
    99+
    2023-06-17
  • 详解vue的Des加密解密
    目录1.安装2.写工具类3.在需要的地方引用4.调用5.VUE的方式1.安装 npm install crypto-js@3.3.0 --save-dev 这样是安装固定版本3.3...
    99+
    2024-04-02
  • 如何在Java项目中实现一个DES加密算法
    如何在Java项目中实现一个DES加密算法?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Base64.javapackage com.mstf.des; import java...
    99+
    2023-05-31
    des加密 java
  • C#中实现AES算法加密解读
    目录先上效果图先添加辅助类开始实现总结先上效果图 文件和加密文件之间的转换。 先添加辅助类 public class AES_EnorDecrypt { ...
    99+
    2023-02-26
    C# AES算法加密 AES算法加密 C# AES加密
  • C#利用异或算法实现加密解密
    目录实践过程效果代码实践过程 效果 代码 public partial class Form1 : Form { public Form1() { ...
    99+
    2023-01-03
    C#异或算法实现加密解密 C# 异或算法 C# 加密解密
  • python基于pyDes库实现des加密的方法
    本文实例讲述了python基于pyDes库实现des加密的方法。分享给大家供大家参考,具体如下: 下载及简介地址:https://twhiteman.netfirms.com/des.html 如需要在py...
    99+
    2022-06-04
    方法 python pyDes
  • golang常用加密解密算法总结(AES、DES、RSA、Sha1、MD5)
    目录关于加密解密AESDESRSAMD5Sha1Base64在项目开发过程中,当操作一些用户的隐私信息,诸如密码、帐户密钥等数据时,往往需要加密后可以在网上传输。这时,需要一些高效地...
    99+
    2024-04-02
  • 数据加密DES是一种什么算法
    DES是适用于计算机系统的商用密码,为一个分组加密算法,它以64位为分组对数据加密,64位一组的明文从算法的一端输入,64位的密文从另一段输出;且是一个对称算法,加密和解密用的是同一个算法。DES的密钥通常表示为64位的数,但每个第8位都用...
    99+
    2024-04-02
  • Android数据加密之异或加密算法的实现方法
    这几天被公司临时拉到去做Android IM即时通信协议实现,大致看了下他们定的协议,由于之前没有参与,据说因服务器性能限制,只达成非明文传递,具体原因我不太清楚,不过这里用的...
    99+
    2022-06-06
    加密 方法 异或 算法 Android
  • python实现RSA加密(解密)算法
    RSA是目前最有影响力的公钥加密算法,它能够抵抗到目前为止已知的绝大多数密码攻击,已被ISO推荐为公钥数据加密标准。 今天只有短的RSA钥匙才可能被强力方式解破。到2008年为止,世界上还没有任何可靠的攻击...
    99+
    2022-06-04
    算法 python RSA
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作