分布式服务器框架之Servers.Core库实现 DES对称加密算法;SHA1信息摘要算法;MD5信息摘要算法

简介: 通信双方(通信主体)同时掌握一个钥匙,加解密都由这一个钥匙完成。通信双方通信前共同拟定一个密钥,不向第三方公开,发送前加密和接受后解密都由此密钥完成。即钥匙如果泄露,将暴露自己的全部信息。

1 介绍


1.1 DES对称加密算法介绍


对称加密算法


通信双方(通信主体)同时掌握一个钥匙,加解密都由这一个钥匙完成。通信双方通信前共同拟定一个密钥,不向第三方公开,发送前加密和接受后解密都由此密钥完成。即钥匙如果泄露,将暴露自己的全部信息。


DES(Data Encrytion Standard)算法


DES是IBM在上世纪70年代开发的单密钥对称加解密算法。该算法利用一个56+8奇偶效验位(第8,16,24,32,40,48,56,64位)的密钥对以64为单位的块数据进行加解密。它已经成为国际上商用保密通信和计算机通信的最常用加解密算法,现在虽然其安全性受到技术发展的威胁,但在非国防领域其应用性还非常健壮,研究它对于研究以后新的加密标准算法有重要的启示作用。


原理


该算法是一个利用56+8奇偶校验位(第8,16,24,32,40,48,56,64)=64位的密钥对以64位为单位的块数据进行加解密。


DES加密算法现已经被破解,建议在实际项目中不要使用DES算法,要使用也要用更复杂的3DES加密算法。


1.2 SHA1信息摘要算法介绍


安全哈希算法(Secure Hash Algorithm)主要适用于数字签名标准(Digital Signature Standard DSS)里面定义的数字签名算法(Digital Signature Algorithm DSA)。对于长度小于2^64位的消息,SHA1会产生一个160位的消息摘要。当接收到消息的时候,这个消息摘要可以用来验证数据的完整性。在传输的过程中,数据很可能会发生变化,那么这时候就会产生不同的消息摘要。


SHA1有如下特性:不可以从消息摘要中复原信息;两个不同的消息不会产生同样的消息摘要。


计算过程


对于任意长度的明文,SHA1首先对其进行分组,使得每一组的长度为512位,然后对这些明文分组反复重复处理。对于每个明文分组的摘要生成过程如下:


1、将512位的明文分组划分为16个子明文分组,每个子明文分组为32位。


2、申请5个32位的链接变量,记为A、B、C、D、E。


3、16份子明文分组扩展为80份。


4、80份子明文分组进行4轮运算。


5、链接变量与初始链接变量进行求和运算。


6、链接变量作为下一个明文分组的输入重复进行以上操作。


7、 最后,5个链接变量里面的数据就是SHA1摘要。


想深挖原理的可以看引用处的SHA1原理链接,不想看的也没关系,直接拿来用,知道怎么用就行了。


1.3 MD5信息摘要算法介绍


MD5信息摘要算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致。


MD5由美国密码学家罗纳德·李维斯特(Ronald Linn Rivest)设计,于1992年公开,用以取代MD4算法。这套算法的程序在 RFC 1321 标准中被加以规范。1996年后该算法被证实存在弱点,可以被加以破解,对于需要高度安全性的数据,专家一般建议改用其他算法,如SHA-1 SHA-2。2004年,证实MD5算法无法防止碰撞(collision),因此不适用于安全性认证,如SSL公开密钥认证或是数字签名等用途。


应用


MD5一般用于校验文件的完整性,如通过网络下载的文件,可能缺少部分或者被篡改,通过计算实际接收文件的MD5码,与原始MD5比较,判断文件是否正确。在密码存储方面,将用户输入的明文密码转成MD5码保存,后期应用只匹配比较MD5码,这样即使后台管理员也无法查看到真实密码。


1.4 SHA1和MD5算法比较


相同点:


MD5、SHA-1都是通过对数据进行计算,来生成一个校验值,该校验值用来校验数据的完整性,对相同的数据加密后相同;MD5和SHA-1用于安全(Security)领域,比如文件校验、数字签名等。


不同点:


1、安全性不同,SHA-1 的安全性比MD5高;


2、校验值的长度不同,MD5校验位的长度是16个字节(128位);SHA-1是20个字节(160位);


3、运行速度不同,SHA-1 的运行速度比MD5慢。


2 代码实现


2.1 DES加密算法实现代码


#region DES加密解密 
        /*
         * 概况:
         * DES加密算法现已经被破解,要使用也是用3DES加密算法
         */
        //用于对称算法的初始化向量(公钥)
        private static byte[] Keys = { 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF };
        public static string KeyDES = "87654321";
        /*DES加密字符串
            encryptString:待加密的字符串
            encryptKey:加密密钥,要求为8位(8个字符)
         */
        public static string EncryptDES(string encryptString,string encryptKey)
        {
            try
            {
                byte[] rgbKey = Encoding.UTF8.GetBytes(encryptKey.Substring(0,8));
                byte[] rgbIV = Keys;
                byte[] inputByteArray = Encoding.UTF8.GetBytes(encryptString);
                //des服务者
                DESCryptoServiceProvider dCSP = new DESCryptoServiceProvider();
                //内存流
                MemoryStream mStream = new MemoryStream();
                //加密流
                CryptoStream cStream = new CryptoStream(mStream, dCSP.CreateEncryptor(rgbKey,rgbIV), CryptoStreamMode.Write);
                cStream.Write(inputByteArray,0,inputByteArray.Length);
                cStream.FlushFinalBlock();
                return Convert.ToBase64String(mStream.ToArray());
            }
            catch 
            {
                return encryptString;
            }
        }
        /*DES解密
            decryptString: 待解密的字符串
            decryptKey   : 解密密钥,要求8位,要求和加密密钥相同
        */
        public static string DecryptDES(string decryptString,string decryptKey)
        {
            try
            {
                byte[] rgbKey = Encoding.UTF8.GetBytes(decryptKey.Substring(0,8));
                byte[] rgbIV = Keys;
                byte[] inputByteArray = Convert.FromBase64String(decryptString);
                DESCryptoServiceProvider DCSP = new DESCryptoServiceProvider();
                MemoryStream mStream = new MemoryStream();
                CryptoStream cStream = new CryptoStream(mStream,DCSP.CreateDecryptor(rgbKey, rgbIV),CryptoStreamMode.Write);
                cStream.Write(inputByteArray,0,inputByteArray.Length);
                cStream.FlushFinalBlock();
                return Encoding.UTF8.GetString(mStream.ToArray());
            }
            catch
            {
                return decryptString;
            }
        }
        #endregion


2.2 SHA1信息摘要算法实现代码


 #region Sha1
        //Sha1加密
        public static string Sha1(this string value)
        {
            if (string.IsNullOrEmpty(value))
                return null;
            SHA1 sha1 = new SHA1CryptoServiceProvider();
            byte[] bytResult = sha1.ComputeHash(Encoding.Default.GetBytes(value));
            string strResult = BitConverter.ToString(bytResult);
            strResult = strResult.Replace("-", "");
            return strResult;
        }
        #endregion


2.3 MD5信息摘要算法实现代码


        #region Md5
        //Md5算法
        public static string Md5(this string sDataIn)
        {
            MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
            byte[] bytValue, bytHash;
            bytValue = Encoding.UTF8.GetBytes(sDataIn);
            bytHash = md5.ComputeHash(bytValue);
            md5.Clear();
            string sTemp = "";
            for (int i = 0; i < bytHash.Length; ++i)
            {
                sTemp += bytHash[i].ToString("X").PadLeft(2, '0');
            }
            return sTemp.ToUpper();
        }
        /*Md5算法
         * value:原始字符串
         * Is16:是否16位密码
         */
        public static string Md5(this string value,bool Is16)
        {
            if (string.IsNullOrEmpty(value))
                return null;
            if (Is16)
            {
                //截取前16位数(这样出现Hash值冲突的概率增高了)
                return value.Md5().Substring(0, 16);
            }
            else 
            {
                return value.Md5();
            }
        }
        #endregion


3 引用


DES堆成加密算法原理:DES对称加密算法详解 - 小白糖 - 博客园;


SHA1信息摘要算法原理:SHA1算法实现及详解_Y-peak的博客-CSDN博客_sha1算法;


MD5信息摘要算法原理:MD5算法_夏沫の浅雨的博客-CSDN博客_md5算法;


SHA1和MD5比较:md5和SHA-1算法的区别,哪种比较安全_哈客部落的博客-CSDN博客_md5和sha1区别;


相关文章
|
数据采集 存储 数据可视化
分布式爬虫框架Scrapy-Redis实战指南
本文介绍如何使用Scrapy-Redis构建分布式爬虫系统,采集携程平台上热门城市的酒店价格与评价信息。通过代理IP、Cookie和User-Agent设置规避反爬策略,实现高效数据抓取。结合价格动态趋势分析,助力酒店业优化市场策略、提升服务质量。技术架构涵盖Scrapy-Redis核心调度、代理中间件及数据解析存储,提供完整的技术路线图与代码示例。
1878 0
分布式爬虫框架Scrapy-Redis实战指南
|
算法 数据安全/隐私保护
基于Logistic-Map混沌序列的数字信息加解密算法matlab仿真,支持对文字,灰度图,彩色图,语音进行加解密
本项目实现了一种基于Logistic Map混沌序列的数字信息加解密算法,使用MATLAB2022A开发并包含GUI操作界面。支持对文字、灰度图像、彩色图像和语音信号进行加密与解密处理。核心程序通过调整Logistic Map的参数生成伪随机密钥序列,确保加密的安全性。混沌系统的不可预测性和对初值的敏感依赖性是该算法的核心优势。示例展示了彩色图像、灰度图像、语音信号及文字信息的加解密效果,运行结果清晰准确,且完整程序输出无水印。
基于Logistic-Map混沌序列的数字信息加解密算法matlab仿真,支持对文字,灰度图,彩色图,语音进行加解密
|
算法 数据安全/隐私保护
基于混沌加密的遥感图像加密算法matlab仿真
本项目实现了一种基于混沌加密的遥感图像加密算法MATLAB仿真(测试版本:MATLAB2022A)。通过Logistic映射与Baker映射生成混沌序列,对遥感图像进行加密和解密处理。程序分析了加解密后图像的直方图、像素相关性、信息熵及解密图像质量等指标。结果显示,加密图像具有良好的随机性和安全性,能有效保护遥感图像中的敏感信息。该算法适用于军事、环境监测等领域,具备加密速度快、密钥空间大、安全性高的特点。
|
监控 Java 调度
SpringBoot中@Scheduled和Quartz的区别是什么?分布式定时任务框架选型实战
本文对比分析了SpringBoot中的`@Scheduled`与Quartz定时任务框架。`@Scheduled`轻量易用,适合单机简单场景,但存在多实例重复执行、无持久化等缺陷;Quartz功能强大,支持分布式调度、任务持久化、动态调整和失败重试,适用于复杂企业级需求。文章通过特性对比、代码示例及常见问题解答,帮助开发者理解两者差异,合理选择方案。记住口诀:单机简单用注解,多节点上Quartz;若是任务要可靠,持久化配置不能少。
1100 4
|
11月前
|
存储 搜索推荐 算法
加密算法、排序算法、字符串处理及搜索算法详解
本文涵盖四大类核心技术知识。加密算法部分介绍了对称加密(如 AES)、非对称加密(如 RSA)、哈希摘要(如 SHA-2)、签名算法的特点及密码存储方案(加盐、BCrypt 等)。 排序算法部分分类讲解了比较排序(冒泡、选择、插入、归并、快排、堆排序)和非比较排序(计数、桶、基数排序)的时间复杂度、适用场景及实现思路,强调混合排序的工业应用。 字符串处理部分包括字符串反转的双指针法,及项目中用正则进行表单校验、网页爬取、日志处理的实例。 搜索算法部分详解了二分查找的实现(双指针与中间索引计算)和回溯算法的概念(递归 + 剪枝),以 N 皇后问题为例说明回溯应用。内容全面覆盖算法原理与实践
318 0
|
算法 5G 定位技术
高低频混合组网系统中基于地理位置信息的信道测量算法matlab仿真
本内容展示了一种基于地理位置信息的信道测量算法,适用于现代蜂窝系统,尤其在毫米波通信中,波束对准成为关键步骤。算法通过信号传播模型和地理信息实现信道状态测量,并优化误差提升准确性。完整程序基于Matlab2022a运行,无水印效果,核心代码配有中文注释及操作视频,适合深入学习与应用开发。
国家互联网信息办公室关于发布第十批深度合成服务算法备案信息的公告
2025年3月12日,国家网信办公布第十批深度合成算法备案信息,共395款算法通过公示。根据《互联网信息服务深度合成管理规定》,境内深度合成服务提供者和技术支持者需履行备案手续。具体信息可在中国互联网信息服务算法备案系统查询,疑议请发邮件至指定邮箱。附件含完整备案清单。
|
8月前
|
机器学习/深度学习 算法 机器人
【水下图像增强融合算法】基于融合的水下图像与视频增强研究(Matlab代码实现)
【水下图像增强融合算法】基于融合的水下图像与视频增强研究(Matlab代码实现)
751 0

热门文章

最新文章