irmowan / DES

Cipher Project

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

DES

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 测试用输出结果

运行方法

  1. Windows平台下可以直接运行dist目录下的DES_GUI.exe可执行文件
  2. Windows/Linux/Mac OS X平台下,在安装Python3.4后,可以在终端内输入命令$python3 DES_GUI.py执行脚本
  3. Windows/Linux/Mac OS X平台下,也可以使用命令行界面的版本,通过终端命令$python3 DES_Console.py执行
  4. 若需要打包为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

About

Cipher Project


Languages

Language:Python 100.0%