DES对称加密算法

简介: 本实验带您了解并使用DES加解密。

DES对称加密算法

1. 创建资源

开始实验之前,您需要先创建实验相关资源。

在实验室页面,单击创建资源。

(可选)在实验室页面左侧导航栏中,单击云产品资源列表,可查看本次实验资源相关信息(例如IP地址、子用户信息等)。

说明:资源创建过程需要3~5分钟视资源不同开通时间有所差异,ACK等资源开通时间较长。完成实验资源的创建后,您可以在云产品资源列表查看已创建的资源信息,例如:子用户名称、子用户密码、AK ID、AK Secret、资源中的项目名称等。

实验环境一旦开始创建则进入计时阶段,建议学员先基本了解实验具体的步骤、目的,真正开始做实验时再进行创建。

资源创建成功,可在左侧的资源卡片中查看相关资源信息以及RAM子账号信息

2. 实验原理

实验原理

DES加密算法简介

DES(Data Encryption Standard)是分组对称密码算法。DES采用了64位的分组长度和56位的密钥长度,它将64位的输入经过一系列变换得到64位的输出。解密则使用了相同的步骤和相同的密钥。

DES算法利用多次组合替代算法和换位算法,分散和错乱的相互作用,把明文编制成密码强度很高的密文,它的加密和解密过程用的是同一算法。其在算法结构上主要采用了置换、代替、模二相加等函数,通过轮函数迭代的方式来进行计算和工作。

DES算法加密数据的流程如图1所示。

明文处理

图1中左半部分是对明文处理的三个阶段,下面分具体的关键步骤来解释:

初始IP置换

首先64比特明文经过初始置换IP(表1),即将数据的第58位置换到第1位,第50位置换到第2位···,产生64比特的输出X,再将X分成左半部分𝐿0 和右 半部分𝑅0。这是初始IP置换,然后对置换后的数据进行16轮加密处理。

16轮加密处理

DES的一轮加密如图2所示。

加密过程主要在𝑓函数中进行。𝑓函数的输入是一个32比特的数据(𝑅𝑖−1) 和48比特的子密钥(比特的子密钥(𝐾𝑖),输出是32比特的数据,将𝑓函数输出的32比特的数据与𝐿𝑖−1做异或运算得到𝑅𝑖。将𝑅𝑖−1的值直接赋给𝐿𝑖,得到𝐿𝑖

𝑓函数如图3所示,包括扩展置换E密钥异或运算S盒变换P盒置换

首先通过扩展置换E将𝑅0扩展为48位,扩展规则如下表2,即将原数据的第32位放在第1位,第1位放在第2位,...,依次类推。

经过扩展变换E得到的48比特数据与𝐾𝑖进行密钥异或运算,得到48比特数据。进行S盒变换。输出32比特数据。最后经过固定的P盒置换得到𝑓函数的32比特输出数据。S盒和P盒分别见表3、表4。

S盒变换过程为:将S盒6位输入的第1位和第6位组成一个2位的二进制数对应S盒中的某一行,中间4位组成一个4位二进制数对应位二进制数对应S盒中的某一列。例如S1盒的输入为100110,则对应S1[2][3],即S1盒第3行第4列的数8 (1000)。(注:从0开始)

经过S盒变换后,产生8组4比特的数据,拼接后为32比特。32比特作为输入进行P盒置换。P盒的具体置换过程即将原数据的第16位置换到第1位,第7位置换到第2位。经过P盒置换后得到32比特的数据。

这就是𝑓函数的构造方式,以此类推进行16轮加密。

结尾变换

结束最后一轮加密之后,会产生一个64比特的数据,将这64比特数据平均分为左右两等分,然后将左右两等分进行位置调换,即原来左等分的数据整体位移至右侧,而原来右等分的数据则整体位移至左侧。再经过逆初始置换 ,最终将得到一组64比特的密文。逆初始变换见表5。即将数据的第40位置换到第1位,第8位置换到第2位,...,依次类推。结果即为密文。

密钥处理

图1右半部分给出了密钥的产生过程。具体过程如下:

密钥置换PC-1

DES算法的加密密钥是64比特,但是由于密钥的第n∗8(n=1,2...8)位是奇偶校验位,因此实际参与加密的密钥只有56比特。去掉8个奇偶校验位,用密钥置换PC-1(表6)置换剩下的56位密钥,即将密钥的57位置换到第1位,第49位置换到第2位......

子密钥的生成

将56位密钥等分成两部分,前28位记为𝐶[0],后28位记为𝐷[0]。 计算子密钥(共16个),从𝑖 = 1开始,分别对𝐶[𝑖−1],𝐷[𝑖−1]做循环左移来生成𝐶[𝑖],𝐷[𝑖]。每次左移的位数见下表。

将𝐶[𝑖],𝐷[𝑖]合并后通过压缩置换PC-2,即将第14位置换到第1位,将17位置换到第2位···,得到48位子密钥𝐾𝑖

DES解密算法

由于DES算法属于对称密码体制算法,因此DES的解密过程和加密过程是一样的,其加密和解密过程也可以用同样的方法。

3. 实验内容

实验内容

编写代码实现DES加密、解密算法。语言不限(推荐使用Python语言)。

将加密后的密文、解密后的明文输出到文件或屏幕。选取不同的明文加密(自己的名字,可以是拼音,也可以是汉字编码后的,取最后64bit)。

独立完成实验报告(包含实验思路,实验结果截图等),不得抄袭。

# -*- coding: utf-8 -*-
"""
Created on Tue Apr 06 23:15:21 2021
@author: Zheng Yuntao
"""
#import sys
"""S盒与其他置换盒的数据"""
# WRITE YOUR CODE HERE!
def permutation_by_table(block, block_len, table):
    """实现置换表的功能"""
    # WRITE YOUR CODE HERE!
def generate_round_keys(C0, D0):
    """生成子密钥"""
    # WRITE YOUR CODE HERE!
def round_function(Ri, Ki):
    """f函数"""
    # WRITE YOUR CODE HERE!
def encrypt(plaintext, key):
    """加密算法"""
    # WRITE YOUR CODE HERE!
    return 0
def decrypt(ciphertext, key):
    """加密算法"""
    # WRITE YOUR CODE HERE!
    return 0
if __name__ == '__main__':
    # 测试代码
    text = '12345678'
    key = 'FUDANSTU'
    cipher_text = encrypt(text, key)
    print (cipher_text)
    plain_text = decrypt(cipher_text, key)
    print (plain_text)
    # WRITE YOUR CODE HERE!

实验链接:https://developer.aliyun.com/adc/scenario/e0b41962a14e4e33a817578decf75d78

相关文章
|
25天前
|
Java 数据安全/隐私保护
des加密+base64编码,base64解码+des解密
des加密+base64编码,base64解码+des解密
22 0
|
1月前
|
算法 安全 C语言
使用C语言实现DES算法代码
使用C语言实现DES算法代码
|
4月前
|
算法 搜索推荐 Java
DES - 对称加密算法简要介绍与JAVA实现
DES - 对称加密算法简要介绍与JAVA实现
53 2
|
2月前
|
算法 Android开发
安卓逆向 -- 自吐算法(DES)
安卓逆向 -- 自吐算法(DES)
10 0
|
2月前
|
算法 数据安全/隐私保护
火山中文编程 -- DES算法和AES算法
火山中文编程 -- DES算法和AES算法
20 0
|
2月前
|
算法 JavaScript Java
安卓逆向 -- 算法基础(DES与3DES)
安卓逆向 -- 算法基础(DES与3DES)
14 0
|
3月前
|
算法 安全 数据安全/隐私保护
C/C++学习 -- 分组加密算法(DES算法)
C/C++学习 -- 分组加密算法(DES算法)
34 0
|
3月前
|
JavaScript 前端开发 算法
JavaScript学习 -- 对称加密算法DES
JavaScript学习 -- 对称加密算法DES
15 0
|
20天前
|
算法 安全 程序员
详解 DES加密技术 | 凯撒密码 | 栅栏密码
详解 DES加密技术 | 凯撒密码 | 栅栏密码
105 0
|
6月前
|
算法 Java 关系型数据库
JSP基于DES算法管理系统myeclipse开发mysql数据库web结构java编程jsp展现
JSP 基于DES算法管理系统是一套完善的web设计系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,mysql数据库存储,系统主要采用B/S模式开发。
42 0