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区别;

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

  1. 分布式服务器框架之Server.Core库中实现 XXTEA分组加密算法

    1 XXTEA分组加密算法介绍 在密码学中,微型加密算法(Tiny Encryption Algorithm,TEA)是一种易于描述和执行的块密码,通常只需要很少的代码就可实现.其设计者是剑桥大学计算 ...

  2. 《C#分布式服务器框架》尝试

    最近看了一大堆的分布式服务器框架,然后自己也向尝试着搭建一个,也算是对自己能力的一种总结吧,经过这些年,发现自己错过的东西太多啦,需要好好努力,才能不被时代给淘汰. 我准备参考skynet的框架,来搭 ...

  3. 分布式服务器框架之搭建C#+MongoDB+Redis初步

    后面为了学习准备搭建一个分部署的游戏服务器,还有一套基于Unity的客户端轻量级框架.架构图后面补上,用CSDN记录一下自己的开发笔记. 游戏服务器主要分成了四个库(Dll).三个逻辑服务器.一个We ...

  4. 使用java库中的对称加密算法

    对称加密算法是说加密方和解密方使用相同的密钥.常见的对称加密算法包括4个,DES,DESede(3DES),AES,PBE. 本文讨论的内容是加密算法,不是Message Digest,不是编码.下面 ...

  5. 分布式服务器架构下的3v3团队对抗游戏

    [Warning] 本仓库作为本人的毕设课题,主要是初学者的学习/实践,谨慎用于正式用途. Github仓库链接:https://github.com/ZerlenZhang/distributed- ...

  6. python游戏服务器框架_mqant首页、文档和下载 - Golang/python语言开发的分布式游戏服务器框架 - OSCHINA - 中文开源技术交流社区...

    mqant mqant 是一款基于 Golang 语言的简洁,高效,高性能的分布式游戏服务器框架,研发的初衷是要实现一款能支持高并发,高性能,高实时性的游戏服务器框架,也希望 mqant 未来能够做即 ...

  7. 高性能分布式游戏服务器框架

    欢迎大家Fork mqant开源框架 为什么决定要重新造一个轮子? 目前网上优秀的开源游戏服务器框架也不少(当然与web框架比起来就少太多了),但总结起来都各有各的优缺点,下面列出我在选型过程中的一些 ...

  8. java 分布式游戏服务器框架,集群游戏服务器框架,游戏服务器网关框架 ioGame 网络游戏服务器框架

    网络游戏框架简介 ioGame 是一个由 java 语言编写的网络游戏服务器框架.支持 websocket.tcp ,适用于全球同服.回合制游戏.策略游戏.即时战斗等游戏服务器的开发.具有高性能.稳定 ...

  9. 高性能分布式游戏服务器框架,浅谈Go语言自研的分布式游戏服务器架构

    引言:使用Go语言开发游戏已经有5年了,做了三款上线手游,一直采用的都是我们自研的分布式游戏服务器架构.最近我们想把它分享一下,总结一下这几年的经验. 一. 架构图 分布式游戏服务器架构图 1. CD ...

最新文章

  1. 算法笔记-异或的使用、异或算法面试题、详细解析、异或的理解与其使用规律
  2. python 在主线程开线程_Python开启线程,在函数中开线程的实例
  3. Mysql 错误 Code: 1093. You can't specify target table for update in FROM clause
  4. Django Mysql SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED
  5. 内核态与用户态的区别
  6. java通过spring获取配置文件_springboot获取properties文件的配置内容(转载)
  7. 国产数据库技术全面破冰,金融核心系统打破国外巨头垄断指日可待
  8. (计算机组成原理)第一章计算机系统概述-第四节:计算机的性能指标
  9. iOS开发--完整项目
  10. mysql 删除表的方法_MySQL 删除表的三种方式
  11. Matlab中freqz函数使用
  12. 俱乐部/会所/协会在短信平台应用指南
  13. PLSQL连接Oracle:ORA-12154: TNS: 无法解析指定的连接标识符
  14. 计算机网络相关术语概念名词汇总总结集合——摘自《计算机网络--自顶向下》第四章
  15. 软件工程的就业前景如何?程序员的发展前景如何?
  16. C语言打开记事本文件,并向记事本写入字符串,跨程序向cmd命令行窗口写入字符串执行命令
  17. 【小林课堂】【光学】 透镜成像规律
  18. 独立开发Unity3D需要用到的一些其他工具
  19. AES加密算法的数学基础
  20. APM的L1制导算法改装思路

热门文章

  1. AFL_qemu_mode
  2. 信息安全中的尖刀burpsuite的下载,安装
  3. 【300+精选大厂面试题持续分享】大数据运维尖刀面试题专栏(八)
  4. Gta4 微软服务器,R星发布《GTA4》Win10补丁 业界良心从不令人失望
  5. ElementUI 获取el-table表格选中行信息及清除选中行
  6. 微软和NASA强强联手,重磅推出Python免费课程
  7. php 已知概率抽奖,抽奖概率算法实现-用PHP来实现的
  8. Linux 0.00简单多任务内核boot.s超详注释
  9. SQL84 实习广场投递简历分析(一)
  10. bzoj4605 崂山白花蛇草水 权值线段树套kd树