DES(Data Encryption Standard)是一种基于分组密码的数据加密标准。
本程序用python3.4语言,实现了简单的DES加解密算法。
Readme.md
即为本内容,说明文档dist/
目录是在Windows下生成的可执行文件的目录dist/DES_GUI.exe
DES的可执行文件DES_GUI.py
DES的可视化版本源代码DES_Console.py
DES的命令行版本源代码setup.py
由python内置GUI生成exe的工具Key.txt
测试用主密钥Text.txt
测试用输入文本Result.txt
测试用输出结果
- Windows平台下可以直接运行
dist
目录下的DES_GUI.exe
可执行文件 - Windows/Linux/Mac OS X平台下,在安装Python3.4后,可以在终端内输入命令
$python3 DES_GUI.py
执行脚本 - Windows/Linux/Mac OS X平台下,也可以使用命令行界面的版本,通过终端命令
$python3 DES_Console.py
执行 - 若需要打包为exe文件,安装py2exe扩展库后,在终端使用命令
$python3 setup.py py2exe
打包
- 该程序模拟了DES加密和解密算法
- 实现了六轮的DES加解密
- 需要注意的是,由主密钥产生的16个子密钥,只使用到了前6个,加解密时使用顺序相反
- 使用CBC模式加密:加密时,第一组密文为DES(IV),以后每组密文均为前一组密文和当组明文异或后的加密输出
- 加密时的64位IV为随机产生
- 加解密时的补位,采取了PKCS5Padding:缺几个字节,即补几个字节的几。如,缺6个字节,则补上6个字节的'06'
- 若解密时补位检测出错,则忽视补位,输出原始的解密结果
- 明文补位以字节为单位,明文必须是8的倍数,否则报错
- 密文必须是64的倍数,且至少两组(128位)
- 密钥必须是64位
- 输入的位数有错时,会输出相应的提示
- 由于采用了随机生成的IV,加密结果每次均不同,但解密结果唯一
- 该程序的用户界面版本使用python的tkinter库编写
- 提供三个文本框,分别是输入文本、输入密钥、输出结果
- 输入文本可以是明文或密文,选择相应的处理方式(加密/解密),输出到输出结果文本框中
- 输入为二进制字符串,也即连续的01字符串,其他输入均不合法,中途不得含有空格等其它字符
- 还可以从指定文件中导入输入文本,将输出结果导出到指定文件中
运行GUI程序,进行加解密测试。
导入已存好的txt文本,选择加密模式。
Key: 1011011000001111100010100111111011011000100111011001001001100000
Text: 00100010001000100010001000100010001000100010001000100010
Encrypt plain text:
Result: 00110001000101001110001010010000101101000010110100001111110101011000100010110100001010110111100011001100110100110011110001001010
多次按加密按钮,会发现每次得到的加密结果不同。这是由于程序随机产生初始IV导致的。
可以将得到的结果保存。
载入刚刚保存的结果,或者直接复制到Text文本框中,进行解密。
解密结果与刚刚输入的明文一致,加解密可逆。
多次按解密按钮,得到的结果不变。
尝试不同的输入进行测试,当输入文本、密钥位数不正确时,会在Result中输出适当的错误信息。
DES算法文档:DATA ENCRYPTION STANDARD.
Author: Irmo
Date: 2015.10