广告
返回顶部
首页 > 资讯 > 后端开发 > Python >DES/3DES/AES
  • 258
分享到

DES/3DES/AES

DESAES 2023-01-31 07:01:34 258人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

      数据加密算法DES数据加密算法(Data Encryption AlGorithm,DEA)的数据加密标准(Data Encryption Standard,DES)是规范的描述,它出自 IBM 的研究工作,并在 1997 年

 
 
 
数据加密算法DES
数据加密算法(Data Encryption AlGorithm,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 Encryption Standard,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值为7828e8ca43f7d8329ead4c1f aa39c1ec,取前16位7828e8ca43f7d832十六进制值(37 38 32 38 65 38 63 61 34 33 66 37 64 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。

--结束END--

本文标题: DES/3DES/AES

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

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

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • DES/3DES/AES
          数据加密算法DES数据加密算法(Data Encryption Algorithm,DEA)的数据加密标准(Data Encryption Standard,DES)是规范的描述,它出自 IBM 的研究工作,并在 1997 年...
    99+
    2023-01-31
    DES AES
  • DES/3DES/AES加密
          数据加密算法DES数据加密算法(Data Encryption Algorithm,DEA)的数据加密标准(Data Encryption Standard,DES)是规范的描述,它出自 IBM 的研究工作,并...
    99+
    2023-01-31
    DES AES
  • php中aes与des有哪些区别
    这篇文章将为大家详细讲解有关php中aes与des有哪些区别,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。区别:1、DES将明文分成两半进行处理,而AES将整块一起处理生成密文;2、AES比DES快的多,...
    99+
    2023-06-29
  • php中aes与des有什么区别
    本文操作环境:Windows10系统、PHP7.1版、Dell G3电脑。php中aes与des有什么区别DES与AES之间的主要区别在于加密过程。在DES中,将明文分为两半,然后再进行进一步处理;而在AES中,整个块不进行除法,整个块一起...
    99+
    2017-11-02
    php
  • Java怎么实现对称加密DES和AES
    本文小编为大家详细介绍“Java怎么实现对称加密DES和AES”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java怎么实现对称加密DES和AES”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。实验内容和要求采用...
    99+
    2023-07-05
  • 详解DES&3DES算法的原理以及C#和JS的实现
    目录一、简介1、DES 简介2、3DES 简介二、C# 代码实现1、DES2、3DES三、js 语言实现 1、DES2、3DES一、简介 1、DES 简介 DES 全称为 ...
    99+
    2023-03-19
    C# DES算法 JS DES算法 DES算法实现
  • Java实现对称加密DES和AES的示例代码
    目录实验内容和要求参考代码实验内容和要求 采用Java实现采用对称密码算法的应用软件,所用算法包括DES算法和AES算法。要求该软件具有图形用户界面,能生成密钥,以及对字符串和文件进...
    99+
    2023-05-14
    Java实现对称加密DES AES Java对称加密DES AES Java对称加密 Java DES AES
  • DES&3DES算法原理及C#和JS实现的方法是什么
    这篇文章主要介绍“DES&3DES算法原理及C#和JS实现的方法是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“DES&3DES算法原理及C#和JS实现的方法是什么”文章能帮助大...
    99+
    2023-07-05
  • golang常用加密解密算法总结(AES、DES、RSA、Sha1、MD5)
    目录关于加密解密AESDESRSAMD5Sha1Base64在项目开发过程中,当操作一些用户的隐私信息,诸如密码、帐户密钥等数据时,往往需要加密后可以在网上传输。这时,需要一些高效地...
    99+
    2022-11-13
  • Python加密解密大全(md5、sha1、base64、url编码、DES、AES、HmacSHA256、RSA)
    文章目录 一、MD5加解密二、sha1加解密三、base64加解密四、url编解码五、DES加解密六、AES加解密七、HmacSHA256加解密八、RSA加解密九、生成各种随机参数 一...
    99+
    2023-10-23
    python 开发语言
  • Java项目中AES与DES的加密解密怎么利用Hutool实现
    Java项目中AES与DES的加密解密怎么利用Hutool实现?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。介绍AES和DES同属对称加密算法,数据发信方将明文(原始数据)和加...
    99+
    2023-05-31
    java aes des
  • PHP 3DES加密
    不多说,直接上代码类 然后自行依据实际情况调用即可 自行了解引用,有测试示例在代码中 来源地址:https://blog.csdn.net/Purgatory001/article/details/12753759...
    99+
    2023-10-03
    php des加密
  • 3des算法源码
    using System;using System.Text;using System.IO;using System.Security.Cryptography;class Class1{ static void Main() {  Co...
    99+
    2023-01-31
    算法 源码 des
  • 【Python爬虫----加密解密】爬虫JS逆向时Python的加密解密,编码(MD5,AES,DES,RSA,base64,UrlEncode等)
    如果遇到问题可以留言,欢迎技术交流。交换意见 一,Python中运行JS代码 1-1  解决中文乱码或者报错问题 import subprocessfrom functools import partialsubprocess.Popen ...
    99+
    2023-10-11
    javascript 前端 开发语言
  • 使用keytool生成3DES密钥
    keytool 简介 keytool生成3DES密钥 C:\Program Files\Java\jre1.8.0_161\bin>keytool -genseckey -alias test-TDES -keyalg DESede ...
    99+
    2023-01-31
    密钥 keytool DES
  • nodejs 实现3des加密解密
    Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,它非常适合构建高性能的网络应用程序。3DES(Triple Data Encryption Standard)是一种常用的对称加密算法,在数据传输和存储...
    99+
    2023-05-16
  • 3DES,32位长秘钥加密
    一般3des加密的秘钥是一个24位的字节数组,但是很多遇到32位字符串秘钥,不知道怎么去用,其实只是经过几步转化就可以了。希望这篇文章对大家有帮助或者带来灵感比如:秘钥:33333333333333333333333333333333要加密...
    99+
    2023-01-31
    DES 位长秘钥
  • python aes 加密
    python 进行aes 加密报错,windows pip install pycryptodome 安装Crypto linux pip install pycrypto 1 import base64 2 3 from Cr...
    99+
    2023-01-31
    python aes
  • python实现AES算法及AES-CFB8加解密源码
    目录Python实现AES算法生成轮密钥加密解密完整代码如下测试测试程序Python实现AES-CFB8加解密Python实现AES算法 密码学课程老师留的作业,我觉得用python...
    99+
    2022-11-13
  • 如何浅析.NET C# DES
    今天就跟大家聊聊有关如何浅析.NET C# DES,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。C# DES加密应该是最基础的加密算法,为了搞清楚它在.NET C#里面的用法,我费了...
    99+
    2023-06-17
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作