源码:https://gitee.com/Cheney822/programmes/blob/master/des.py
摘要
实验利用Python语言实现了des加密和解密的功能,并封装成一个类方便后续调用。程序可以读取由数字、符号、字母和中文组成的字符串,并将其转换成二进制在程序内部处理。程序需要的密钥为64位二进制,处理的明文为64的整数倍,对于读入的密钥和明文,转换后不足64位的补0补到64位,超过64位的密钥直接丢弃,超过64位的明文补0补到64的整数倍。
程序为了能够处理中文,采用utf-8编码,读入的明文经过编码转为二进制交由函数处理得到密文,由于加密后的密文不一定符合utf-8编码规则,若使用utf-8解码会得到不可识读、无法输出的字符,故对加密后的二进制密文做base64转换成字符串,输出给用户。解密过程是上述过程的逆过程,首先读入密文字符串,然后利用base64解码,得到的密文二进制序列交由函数处理得到明文字二进制。最后由utf-8编码输出原明文字符序列。
程序预留了调试信息的输出接口,可支持三级中间信息的输出。默认为0级不做任何调试信息的输出,1级仅输出少量重要信息,二级输出全部详细调试信息。
程序采用了多线程并行的设计,加密和解密的过程中要把源文本二进制每64位为一个部分投入一个独立的线程进行处理,最后各个线程处理的结果拼接为最终结果。并预留接口可以实现多线程模式的开/关。
背景
*数据加密*,指的是根据一定规则,将数据处理成不规则的数据,使得人们除非有了关键的钥匙以及得知这个规则,难于得知无规则数据的真实含义。这个一定规则 就是加密算法,这个钥匙就是密钥。
*数据加密分为对称密钥加密以及非对称密钥加密:*
对称密钥加密: 双方共同持有这个密钥,发送方用这个密钥按照指定的算法将数据加密,再发出去;接收方用这个密钥将接收到的数据解密,以得到真实的数据含义。由于双方都持有这个密钥,而且内容相同,所以叫对称密钥
非对称密钥加密:这种加密方式的密钥是一对,发送方用其中的一把钥匙将数据加密,再发出去;接收方用这对密钥的另一把钥匙将数据解密,以得到真实的数据含义。发送方持有密钥中的一把钥匙,接收方持有另外一把。接收方持有的钥匙叫 私钥, 而接收方持有的这把钥匙叫公钥 。两把钥匙不一样,所以叫做非对称密钥加密,也叫做公开密钥算法。
*对称密钥加密:*
对称密钥加密又叫专用密钥加密或共享密钥加密,即发送和接收数据的双方必使用相同的密钥对明文进行加密和解密运算。对称密钥加密算法主要包括:DES、3DES、IDEA、RC5、RC6等。
对称密钥加密是双方使用相同的密钥,必须以绝对安全的形式传送密钥才能保证安全。若果密钥泄露,加密数据将受到威胁,这点不如非对称密钥。
发送方和接收方必须用安全的方式来获得密钥和保存密钥,必须保证密钥的安全。如果有人发现了密匙,并知道了算法,则使用此密匙加密的所有数据便都是可被窃取。即使分析人员拥有一些密文和生成密文的明文,也不能译出密文或者发现密钥。加密算法应足以抵抗已知明文类型的破译。
des加密
DES是美国国家标准和技术局(NIST)在1977年才有的数据加密标准,DES的思路就是参照二战时期盟军缴获的德军恩格玛加密机,当然更为复杂和严谨,文件编号为FIPS PUB46。老牌而强悍的加密算法,广泛地使用使其颇具名气。算法本身称为DEA(数据加密算法)。DES是最常用的对称加密算法。DES密匙长度为56位,分组长度为64位。为了提高加密强度,后来又发展出三重DES加密,即3DES。
其加密运算、解密运算使用的是同样的密钥,信息的发送者和信息的接收者在进行信息的传输与处理时,必须共同持有该密码(称为对称密码),是一种对称加密算法。
DES 使用一个 56 位的密钥以及附加的 8 位奇偶校验位,产生最大 64 位的分组大小。这是一个迭代的分组密码,使用称为 Feistel 的技术,其中将加密的文本块分成两半。使用子密钥对其中一半应用循环功能,然后将输出与另一半进行“异或”运算;接着交换这两半,这一过程会继续下去,但最后一个循环不交换。DES 使用 16 个循环,使用异或,置换,代换,移位操作四种基本运算。
*主要流程是:*
-
将明文分组
-
对每个分组进行初始字节置换
-
生成对应的子密钥
-
对每一个迭代进行置换,异或运算等运算,得

最低0.47元/天 解锁文章
7708

被折叠的 条评论
为什么被折叠?



