前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >DES/3DES/AES加密

DES/3DES/AES加密

作者头像
py3study
发布2020-01-08 11:38:57
1K0
发布2020-01-08 11:38:57
举报
文章被收录于专栏:python3python3

数据加密算法DES 数据加密算法(Data EncryptionAlgorithm,DEA)的数据加密标准(Data Encryption Standard,DES)是规范的描述,它出自 IBM的研究工作,并在 1997 年被美国政府正式采纳。它很可能是使用最广泛的秘钥系统,特别是在保护金融数据的安全中,最初开发的 DES 是嵌入硬件中的。通常,自动取款机(Automated Teller Machine,ATM)都使用 DES。 DES 使用一个 56位的密钥以及附加的 8 位奇偶校验位,产生最大 64 位的分组大小。这是一个迭代的分组密码,使用称为 Feistel的技术,其中将加密的文本块分成两半。使用子密钥对其中一半应用循环功能,然后将输出与另一半进行“异或”运算;接着交换这两半,这一过程会继续下去,但最后一个循环不交换。DES 使用 16 个循环。 *** DES的主要形式被称为蛮力的或彻底密钥搜索,即重复尝试各种密钥直到有一个符合为止。如果 DES 使用 56 位的密钥,则可能的密钥数量是 2 的56 次方个。随着计算机系统能力的不断发展,DES 的安全性比它刚出现时会弱得多,然而从非关键性质的实际出发,仍可以认为它是足够的。不过,DES 现在仅用于旧系统的鉴定,而更多地选择新的加密标准 — 高级加密标准(Advanced EncryptionStandard,AES)。 DES 的常见变体是三重 DES,使用 168 位的密钥对资料进行三次加密的一种机制;它通常(但非始终)提供极其强大的安全性。如果三个 56 位的子元素都相同,则三重 DES 向后兼容 DES。 IBM 曾对 DES 拥有几年的专利权,但是在 1983 年已到期,并且处于公有范围中,允许在特定条件下可以免除专利使用费而使用。 由于DES是加(解)密64位明(密)文,即为8个字节(8*8=64),可以据此初步判断这是分组加密,加密的过程中会有16次循环与密钥置换过程,据此可以判断有可能是用到DES密码算法,更精确的判断还得必须懂得一点DES的加密过程。 Crackme实例分析 本期Crackme用到MD5及DES两种加密算法,难度适中。这次我们重点来看一下DES的加密过程及注册算法过程。用调试器载入程序,下GegDlgItemTextA断点,可以定位到下面代码,我们先来看一下整个crackme的注册过程: 由于代码分析太长,故收录到光盘中,请大家对照着分析(请见光盘“code1.doc”) 从上面分析可以看出,注册过程是类似:f(机器码,注册码)式的两元运算。机器码是经过md5算法得到的中间16位值,注册码是经过DES解密过程取得16位注册码,然后两者比较,如相等,则注册成功。机器码的运算过程可以参照上一期的MD5算法来理解。下面重点来说一下注册码DES的运算过程。 1、密钥处理过程:一般进行加解密过程都要初始化密钥处理。我们可以跟进004023FA CALL Crackme1.00401A40这个call,可以看到如下代码: …(省略)... 00401A4D LEA ECX,DWORD PTR DS:[ECX] 00401A50 /MOV EDX,EAX 00401A52 |SHR EDX,3 00401A55 |MOV DL,BYTE PTR DS:[EDX+ESI] 00401A58 |MOV CL,AL 00401A5A |AND CL,7 00401A5D |SAR DL,CL 00401A5F |AND DL,1 00401A62 |MOV BYTE PTR DS:[EAX+417DA0],DL 00401A68 |INC EAX 00401A69 |CMP EAX,40 这里比较是否小于64 00401A6C \JL SHORT Crackme1.00401A50 以上过程就是去掉密钥各第八位奇偶位。 …(省略)... 00401AB0 |MOV DL,BYTE PTR DS:[ECX+417D9F] 00401AB6 |MOV BYTE PTR DS:[EAX+417BA3],DL 00401ABC |ADD EAX,4 00401ABF |CMP EAX,38 这里进行密钥变换 …(省略)... 00401BFF ||MOVSX ECX,BYTE PTR DS:[EAX+412215] 00401C06 ||MOV CL,BYTE PTR DS:[ECX+417D9F] 00401C0C ||MOV BYTE PTR DS:[EAX+417BA5],CL 00401C12 ||ADD EAX,6 00401C15 ||CMP EAX,30 这里产生48位的子密钥 00401C18 |\JL SHORT Crackme1.00401BA0 00401C1A |MOV EAX,DWORD PTR SS:[ESP+14] 00401C1E |MOV EDI,EAX 00401C20 |MOV ECX,0C 00401C25 |MOV ESI,Crackme1.00417BA0 00401C2A |REP MOVS DWORD PTR ES:[EDI],DWORD PTR D> 00401C2C |MOV EDI,DWORD PTR SS:[ESP+10] 00401C30 |ADD EAX,30 下一组子密钥 00401C33 |INC EDI 00401C34 |CMP EAX,Crackme1.00417B90 这里进行16次的生成子密钥过程 00401C39 |MOV DWORD PTR SS:[ESP+10],EDI …(省略)... 可以看到8位密钥为:1,9,8,0,9,1,7,0 2、对数据处理的过程,跟进004024C7 CALL Crackme1.00402050,到如下代码: 00402072 |MOV BYTE PTR DS:[EAX+417E30],DL 00402078 |INC EAX 00402079 |CMP EAX,40 这里取得64位数据 0040207C \JL SHORT Crackme1.00402060 …(省略)... 004020C6 |MOV BYTE PTR DS:[EAX+417BA3],DL 004020CC |ADD EAX,4 004020CF |CMP EAX,40 进行第一次变换 004020D2 \JL SHORT Crackme1.00402080 004020D4 MOV AL,BYTE PTR SS:[ESP+20] 004020D8 TEST AL,AL 004020DA MOV ECX,10 …(省略)... 00402191 MOV EBP,DWORD PTR DS:[415094] ; Crackme1.00417E30 00402197 SUB EAX,EBP 这里对变换后的数据分为两部分 00402199 MOV DWORD PTR SS:[ESP+10],EAX 0040219D MOV DWORD PTR SS:[ESP+20],Crackme1.00417B60 004021A5 /MOV EAX,DWORD PTR SS:[ESP+20] 004021A9 |MOV ECX,8 004021AE |MOV ESI,EBP 004021B0 |MOV EDI,Crackme1.00417E10 004021B5 |PUSH EAX 这里用上面生成的子密钥来解密数据 004021B6 |MOV EBX,EBP …(省略)... 004021FF |SUB EAX,30 下一个子密钥 00402202 |CMP EAX,Crackme1.00417890 这里将循环16次,典型的DES加解密过程 00402207 |MOV ECX,8 0040220C |MOV ESI,Crackme1.00417E10 00402211 |REP MOVS DWORD PTR ES:[EDI],DWORD PTR DS:[ESI> …(省略)... 0040225A |MOV BYTE PTR DS:[EAX+417BA2],DL 00402260 |MOV DL,BYTE PTR DS:[ECX+417E2F] 00402266 |MOV BYTE PTR DS:[EAX+417BA3],DL 0040226C |ADD EAX,4 0040226F |CMP EAX,40 这里是未置换 00402272 \JL SHORT Crackme1.00402220 00402274 MOV EBP,DWORD PTR SS:[ESP+18] 00402278 MOV ECX,10 0040227D MOV ESI,Crackme1.00417BA0 …(省略)... 有兴趣的读者可以参考DES算法来理解上面的过程。 Crackme总结 要找到注册码,应该:对机器码生成的md5值,取前面16位,再用DES加密这16位字符,加密后的十六进制值即为注册码。如:机器码2747318257,变换后的md5值为7828e8ca43f7d8329ead4c1faa39c1ec,取前16位7828e8ca43f7d832十六进制值(37 38 32 38 65 38 63 61 34 33 66 3764 38 33 32)用DES加密后数据为5041a5d06937f8f73f87e68a0e7d2810,此即为真正的注册码。

3DES

3DES是DES加密算法的一种模式,它使用3条64位的密钥对数据进行三次加密。数据加密标准(DES)是美国的一种由来已久的加密标准,它使用对称密钥加密法,并于1981年被ANSI组织规范为ANSI X.3.92。DES使用56位密钥和密码块的方法,而在密码块的方法中,文本被分成64位大小的文本块然后再进行加密。比起最初的DES,3DES更为安全。 3DES(即 Triple DES)是DES向AES过渡的加密算法(1999年,NIST将3-DES指定为过渡的加密标准),是DES的一个更安全的变形。它以DES为基本模 块,通过组合分组方法设计出分组加密算法,其具体实现如下:设Ek()和Dk()代表DES算法的加密和解密过程,K代表DES算法使用的密钥,P代表明 文,C代表密表,这样, 3DES加密过程为:C=Ek3(Dk2(Ek1(P))) 3DES解密过程为:P=Dk1((EK2(Dk3(C))) 具体的加/解密过程如图所示。 using System; using System.Text; using System.IO; using System.Security.Cryptography; class Class1 { static void Main() { Console.WriteLine("Encrypt String..."); txtKey = "tkGGRmBErvc="; btnKeyGen(); Console.WriteLine("Encrypt Key :",txtKey); txtIV = "Kl7ZgtM1dvQ="; btnIVGen(); Console.WriteLine("Encrypt IV :",txtIV); Console.WriteLine(); string txtEncrypted = EncryptString("1111"); Console.WriteLine("Encrypt String : ",txtEncrypted); string txtOriginal = DecryptString(txtEncrypted); Console.WriteLine("Decrypt String : ",txtOriginal); } private static SymmetricAlgorithm mCSP; private static string txtKey; private static string txtIV; private static void btnKeyGen() { mCSP = SetEnc(); byte[] byt2 = Convert.FromBase64String(txtKey); mCSP.Key = byt2; } private static void btnIVGen() { byte[] byt2 = Convert.FromBase64String(txtIV); mCSP.IV = byt2; } private static string EncryptString(string Value) { ICryptoTransform ct; MemoryStream ms; CryptoStream cs; byte[] byt; ct = mCSP.CreateEncryptor(mCSP.Key, mCSP.IV); byt = Encoding.UTF8.GetBytes(Value); ms = new MemoryStream(); cs = new CryptoStream(ms, ct, CryptoStreamMode.Write); cs.Write(byt, 0, byt.Length); cs.FlushFinalBlock(); cs.Close(); return Convert.ToBase64String(ms.ToArray()); } private static string DecryptString(string Value) { ICryptoTransform ct; MemoryStream ms; CryptoStream cs; byte[] byt; ct = mCSP.CreateDecryptor(mCSP.Key, mCSP.IV); byt = Convert.FromBase64String(Value); ms = new MemoryStream(); cs = new CryptoStream(ms, ct, CryptoStreamMode.Write); cs.Write(byt, 0, byt.Length); cs.FlushFinalBlock(); cs.Close(); return Encoding.UTF8.GetString(ms.ToArray()); } private static SymmetricAlgorithm SetEnc() { return new DESCryptoServiceProvider(); } } K1、K2、K3决定了算法的安全性,若三个密钥互不相同,本质上就相当于用一个长为168位的密钥进行加密。多年来,它在对付强力***时是比较安全的。若数据对安全性要求不那么高,K1可以等于K3。在这种情况下,密钥的有效长度为112位。

aes

AES——对称密码新标准 对称密码体制的发展趋势将以分组密码为重点。分组密码算法通常由密钥扩 展算法和加密(解密)算法两部分组成。密钥扩展算法将b字节用户主密钥扩展成r个子密钥。加密算法由一个密码学上的弱函数f与r个子密钥迭代r次组成。混 乱和密钥扩散是分组密码算法设计的基本原则。抵御已知明文的差分和线性***,可变长密钥和分组是该体制的设计要点。 AES是美国国家标准技术研究所NIST旨在取代DES的21世纪的加密标准。 AES 的基本要求是,采用对称分组密码体制,密钥长度的最少支持为128、192、256,分组长度128位,算法应易于各种硬件和软件实现。1998年 NIST开始AES第一轮分析、测试和征集,共产生了15个候选算法。1999年3月完成了第二轮AES2的分析、测试。预计在2000年8月AES的最 终结果将公布。 在应用方面,尽管DES在安全上是脆弱的,但由于快速DES芯片的大量生产,使得DES仍能暂时继续使用,为提高安全强度,通常使用独立密钥的三级DES。但是DES迟早要被AES代替。流密码体制较之分组密码在理论上成熟且安全,但未被列入下一代加密标准。

对称加密算法

对称加密算法对称加密算法是应用较早的加密算法,技术成熟。在对称加密算法中,数据发信方将明文(原始数据)和加密密钥一起经过特殊加密算法处理后,使其变成复杂的加密密文发送出去。收信方收到密文后,若想解读原文,则需要使用加密用过的密钥及相同算法的逆算法对密文进行解密,才能使其恢复成可读明文。在对称加密算法中,使用的密钥只有一个,发收信双方都使用这个密钥对数据进行加密和解密,这就要求解密方事先必须知道加密密钥。对称加密算法的特点是算法公开、计算量小、加密速度快、加密效率高。不足之处是,交易双方都使用同样钥匙,安全性得不到保证。此外,每对用户每次使用对称加密算法时,都需要使用其他人不知道的惟一钥匙,这会使得发收信双方所拥有的钥匙数量成几何级数增长,密钥管理成为用户的负担。对称加密算法在分布式网络系统上使用较为困难,主要是因为密钥管理困难,使用成本较高。在计算机专网系统中广泛使用的对称加密算法有DES和IDEA等。美国国家标准局倡导的AES即将作为新标准取代DES。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-09-13 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
腾讯云代码分析
腾讯云代码分析(内部代号CodeDog)是集众多代码分析工具的云原生、分布式、高性能的代码综合分析跟踪管理平台,其主要功能是持续跟踪分析代码,观测项目代码质量,支撑团队传承代码文化。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档