`

DES加密算法

阅读更多

特点
  分组比较短、密钥太短、密码生命周期短、运算速度较慢。
编辑本段基本原理
  入口参数有三个:key、data、mode。 key为加密解密使用的密钥,data为加密解密的数据,mode为其工作模式。当模式为加密模式时,明文按照64位进行分组,形成明文组,key用于对数据加密,当模式为解密模式时,key用于对数据解密。实际运用中,密钥只用到了64位中的56位,这样才具有高的安全性。   DES( Data Encryption Standard)算法,于1977年得到美国政府的正式许可,是一种用56位密钥来加密64位数据的方法。虽然56位密钥的DES算法已经风光不在,而且常有用Des加密的明文被破译的报道,但是了解一下昔日美国的标准加密算法总是有益的,而且目前DES算法得到了广泛的应用,在某些场合,仍然发挥着余热。
编辑本段密钥生成
取得密钥
  从用户处取得一个64位(本文如未特指,均指二进制位))长的密码key ,去除64位密码中作为奇偶校验位的第8、16、24、32、40、48、56、64位,剩下的56位作为有效输入密钥.
等分密钥
  表1.  DES加密算法
  57 49 41 33 25 17 9   1 58 50 42 34 26 18   10 2 59 51 43 35 27   19 11 3 60 50 44 36   表2.   63 55 47 39 31 23 15   7 62 54 46 38 30 22   14 6 61 53 45 37 29   21 13 5 28 20 12 4   把在1步中生成的56位输入密钥分成均等的A,B两部分,每部分为28位,参照表1和表2把输入密钥的位值填入相应的位置. 按照表1所示A的第一位为输入的64位密钥的第57位,A的第2位为64位密钥的第49位,...,依此类推,A的最后一位最后一位是64位密钥的第36位。
密钥移位
  表3. i 1 2 3 4 5 6 7 8  DES加密算法
  ǿ 1 1 2 2 2 2 2 2   i 9 10 11 12 13 14 15 16   ǿ 1 2 2 2 2 2 2 1   DES算法的密钥是经过16次迭代得到一组密钥的,把在1.1.2步中生成的A,B视为迭代的起始密钥,表3显示在第i次迭代时密钥循环左移的位数. 比如在第1次迭代时密钥循环左移1位,第3次迭代时密钥循环左移2位.   第9次迭代时密钥循环左移1位,第14次迭代时密钥循环左移2位.   第一次迭代:   A(1) = ǿ(1) A   B(1) = ǿ(1) B  DES加密算法
  第i次迭代:   A(i) = ǿ(i) A(i-1)   B(i) = ǿ(i) B(i-1)
实现接口函数的介绍
  1 int des(char *data, char *key,int readlen)   参数:   1.存放待加密明文的内存指针(长度为readlen,可能经过填充;   2.存放用户输入的密钥内存的指针   3.待加密明文的长度(8字节的倍数)   功能:   生成加密密钥,把待加密的明文数据分割成64位的块,逐块完成16次迭代加密,密文存放在data所指向的内存中.   2 int Ddes(char *data, char *key,int readlen)   参数:   1.存放待解密文的内存指针(长度为readlen,可能经过填充;   2.存放用户输入的密钥内存的指针   3.待解密文的长度( 8字节的倍数)   功能:   生成解密密钥,把待解密文分割成64位的块,逐块完成16次迭代解密,解密后的明文存放在data所指向的内存中.   3 int des3(char *data, char *key, int n ,int readlen)   参数:   1.存放待加密明文的内存指针(长度为readlen,可能经过填充;   2.存放用户输入的密钥内存的指针  DES加密算法
  3.用户指定进行多少层加密   4.待加密明文的长度(8字节的倍数)   功能:   生成加密密钥,把待加密的明文分割成64位的块,把第i-1层加密后的密文作为第i层加密的明文输入,根据用户指定的加密层数进行n层加密,最终生成的密文存放在data所指向的内存中.   说明:   用户仅仅输入一条密钥,所有的加密密钥都是由这条密钥生成.   4 int Ddes3(char *data, char*key, int n ,int readlen)   参数:   1.存放待解密文的内存指针(长度为readlen,可能经过填充;   2.存放用户输入的密钥内存的指针   3.用户指定进行多少层解密   4.待解密文的长度(8字节的倍数)   功能:   生成解密密钥,把待解密文分割成64位的块,把第i-1层解密后的"明文"作为第i层解密的密文输入,根据用户指定的解密层数进行n层解密,最终生成的明文存放在data所指向的内存中.   说明:   用户仅仅输入一条密钥,所有的解密密钥都是由这条密钥生成.   5 int desN(char*data,char**key,int n_key,int readlen)   参数:   1.存放待加密明文的内存指针(长度为readlen,可能经过填充;   2.存放用户输入的密钥内存的指针   3.用户指定了多少条密钥   4.待加密明文的长度(8字节的倍数)   功能:   DES加密算法生成加密密钥,把待加密的明文分割成64位的块,把第i-1层加密后的密文作为第i层加密的明文输入,根据用户指定的加密层数进行n层加密,最终生成的密文存放在data所指向的内存中.   说明:   这里用户通过输入的密钥条数决定加密的层数,每轮16次迭代加密所使用的加密密钥是由用户自定的对应密钥生成.   6 int DdesN(char*data,char**key,intn_key,int readlen)   参数:   1.存放待解密文的内存指针(长度为readlen,可能经过填充;   2.存放用户输入的密钥内存的指针   3.用户指定了多少条密钥   4.待解密文的长度(8字节的倍数)   功能:   生成解密密钥,把待解密文分割成64位的块,把第i-1层解密后的”明文”作为第i层解密的密文输入,根据用户指定的解密层数进行n层解密,最终生成的明文存放在data所指向的内存中.   说明:   这里用户通过输入的密钥条数决定解密的层数,每轮16次迭代加密所使用的解密密钥是由用户自定的对应密钥生成.   DES加密算法-实现的介绍   利用算法核心代码封装的接口函数编写了一个针对文本文件的加密解密工具。选择把密文以16进制的形式写入文件的方法.当然也可以直接写入文件.   例:  DES加密算法
  密文为:12345678   在内存中显示为:   31 32 33 34 35 36 37 38   那么就把以3132333435363738的形式写入文件.   为了解密的方便,密文中的每个字节用两个字节表示,也即在内存中显示为0x9A的内容,就以9A的形式写入文件中.当内存中显示的内容为0x0?(?代表0~F)形式时,需要以0?的形式写入文件.   这样可以避开前面提及的问题,只是在解密时先按照两两组合的原则,顺序把从文件中读取的数据转换成待解的密文.   例:   读出的数据是:   3132333435363738   那么复原的过程:   31->1   32->2   33->3   ….   38->8   最终得真正的密文12345678,这样就可以调用DES算法解密函数从密文得到明文.   DES算法是对固定大小(64位)的数据块进行加密解密操作的,对于那些不够64位的数据块需要采用填充机制补位到64位长,为了方便使用,数据位的填充是对用户而言是透明的,利用该工具进行加密解密操作时,用户只需输入操作的类型、读取数据的文件名、写入操作结果的文件名、密钥等信息.
编辑本段操作思路
  #define READFILESIZE 512   步骤:   1.从文件中读取READFILESIZE个字节的数据   2.,如果从文件中读出的数据少于READFILESIZE个,以0补足,然后根据用户指定的类型对这READFILESIZE个字节的数据进行操作.   3.判断文件是否结束,没有则执行步骤1   4.把加密后的文件实际长度添加到密文的末尾   5.结束   采用一次只从文件读取READFILESIZE个字节是在为了防止由于需要加密或解密的文件太大导致内存不够的情况出现。   DES加密算法-注意事项   DES算法的加密密钥是根据用户输入的密码生成的,该算法把64位密码中的第8位、第16位、第24位、第32位、第40位、第48位、第56位、第64位作为奇偶校验位,在计算密钥时要忽略这8位.如果输入的密码只是在这8位上有区别的话,那么操作后的结果将是一样的.   例:   输入的密码为wuzhenll,密钥的16进制表示为77 75 7A 68 65 6E 6C 6C   任意改变这64位数据的奇偶校验位,可以得到16个不同的密码,   把8个奇偶检验位全取反后:   w->v   u->t   z->{   h->i   e->d   n->o   l->m   形成新密码:vt{idomm   表面上新密码和原密码迥然不同,但是由于他们仅在奇偶校验位上有区别,所以用这两个密码进行加密解密操作得到的结果是一样的.   笔者建议使用安全系数较高的多密钥加密解密方案.   此外用户输入的密码的长度不受限制,当输入的密码长度为0时,使用缺省64位密码;当输入的密码长度大于8字节时,输入密码的前8个字节为有效密码.   该工具提供6种不同的操作类型:   1:一层加密;   2:一层解密;   3:N层单密钥加密;   4:N层单密钥解密;   5:N层多密钥加密;   6:N层多密钥解密;   这六种操作是对称使用的,例如:加密明文时选择一层加密,解密时对密文使用一层解密

 

分享到:
评论

相关推荐

    DES加密算法(c语言实现)

    DES加密算法的工作原理主要包括以下几个步骤: 1. **初始置换**:原始64位的数据块首先经过一个固定的初始置换,使得数据分布更均匀,增强安全性。 2. **16轮迭代**:每轮迭代都包括四个子步骤: - **子密钥产生*...

    DES加密算法实验

    ### DES加密算法实验知识点 #### 一、实验背景与目的 **DES(Data Encryption Standard)加密算法**是一种经典的对称加密技术,在信息安全领域占据着重要地位。本实验旨在通过实践操作,加深对DES算法工作原理的...

    现代密码学~DES加密算法实验报告.doc

    DES 加密算法是一种分组加密算法,对一定大小的明文或密文来做加密或解密动作。DES 加密算法的实现实验目的理解对称加密算法的原理和特点。实验原理 DES 是一种分组加密算法,每次加密或解密的分组大小均为 64 位,...

    DES加密算法C++实现

    在C++中实现DES加密算法,通常涉及到以下几个关键知识点: 1. **DES算法原理**:DES算法基于Feistel结构,通过16轮迭代变换将64位明文数据转化为64位密文。每一轮迭代包含一个子密钥生成过程和一个替换-置换过程。...

    DES加密算法的原创C语言程序

    在本文中,我们将深入探讨DES加密算法的原理、C语言实现及其相关知识点。 DES算法基于Feistel网络结构,它将明文分为左半部分和右半部分,然后通过一系列迭代过程进行加密。每个迭代包含以下步骤: 1. **初始置换...

    des加密算法

    DES(Data Encryption ...总结来说,DES加密算法是历史上重要且有影响力的加密技术,虽然现在已被更先进的算法所取代,但它在密码学的发展历程中起到了关键作用,并且对于理解和学习现代加密技术的基础至关重要。

    c#编写关于AES与DES加密算法

    C#实现AES与DES加密算法 本资源提供了C#语言实现AES与DES加密算法的示例代码,包括加密和解密函数的实现。AES(Advanced Encryption Standard,高级加密标准)和DES(Data Encryption Standard,数据加密标准)都是...

    des加密算法实现

    ### DES加密算法实现 #### 一、概述 **Data Encryption Standard (DES)** 是一种广泛使用的对称加密算法,由IBM开发,并于1977年由美国国家标准技术研究所(NIST)标准化。它采用的是块加密的方式,即每次加密固定...

    【转】C++实现AES、DES加密算法(含MFC界面)

    在 AES 出现之前,最常用的对称密钥算法是 DES 加密算法,它在 1977 年被公布成为美国政府的商用加密标准。DES 的主要问题是密钥长度较短,渐渐不适合于分布式开放网络对数据加密安全性的要求。因此,1998年美国...

    DES加密算法软件下载

    DES加密算法软件下载DES加密算法软件下载美国国家标准局1973年开始研究除国防部外的其它部门的计算机系统的 数据加密标准,于1973年5月15日和1974年8月27日先后两次向公众发出了 征求加密算法的公 告。加密算法要...

    DES加密算法应用

    本篇文章将深入探讨DES加密算法的应用及其在Java编程中的实现。 DES算法由IBM公司在1970年代初设计,后来被美国国家标准局采纳为数据加密标准。该算法基于Feistel结构,使用64位的密钥对64位的数据进行加密,实际...

    3DES加密算法C语言实现

    在C语言中实现3DES加密算法,可以确保在不同平台上的兼容性和一致性,尤其对于需要跨平台操作的应用场景,如将C语言代码移植到Android平台,通过JNI接口与Java代码交互,能够很好地解决加解密结果不一致的问题。...

    使用java自带des加密算法实现文件加密和字符串加密

    主要介绍了使用java自带des加密算法实现文件加密和字符串加密的示例,需要的朋友可以参考下

    C语言实现DES算法DES加密算法实验报告.doc

    C语言实现DES算法DES加密算法实验报告.doc

    python之des加密算法

    根据提供的文件信息,本文将重点介绍Python中的DES加密算法,并简要提及MD5加密算法。同时,文中还将涉及Python中的图形界面编程库Tkinter的基本用法。以下是对这些知识点的详细解析。 ### 一、Python中的DES加密...

    des加密算法实现任意文件加解密

    理解并掌握DES加密算法以及如何在Java中实现文件加解密,对于提升数据安全保护能力具有重要意义。然而,需要注意的是,由于DES的密钥长度较短,现代密码学已经不再推荐使用DES,而是转向更安全的算法如AES(Advanced...

    des.rar_DES加密算法C++_c++ des加密_des_des加密算法 C++_对称加密算法

    DES加密算法在当时因其高效性和安全性而被广泛应用,但随着计算能力的提升,它的安全性逐渐受到挑战,目前已被更强大的加密标准如AES(Advanced Encryption Standard)所取代。 在C++中实现DES加密算法,通常会涉及...

    DES加密算法JAVA实现(带简单界面)

    在项目中,"杨叶龙+13051067+第二次作业+DES加密算法"可能是文件的命名规范,其中包含了学生的姓名、学号以及作业主题,表明这是一个学生的学习成果,可能包含源代码、编译后的JAR文件以及相关的文档。 在实际应用...

    DES加密算法及有关说明.rar

    对于理解DES加密算法,可以参考"DES加密算法及有关说明(HTM)"文件,其中可能包含了更详细的步骤解释、工作示例以及与实际应用相关的讨论。学习DES不仅有助于理解对称加密的基础原理,也为理解和评估其他更现代的加密...

    DES加密算法的C++语言实现

    在C++中实现DES加密算法,需要理解其工作原理和流程,包括初始置换、子密钥生成、轮函数、逆初始置换等步骤。下面将详细介绍DES加密算法以及如何用C++实现。 1. **DES算法简介** - **结构**:DES由16个相同的48位...

Global site tag (gtag.js) - Google Analytics