- 浏览: 35906 次
- 性别:
- 来自: 大连
文章分类
最新评论
-
魔力猫咪:
找到毛病了。IE运行脚本太慢,提示可能失去响应的时候停止了脚本 ...
python实现DES加密算法 -
chirking:
<div class="quote_title ...
python实现DES加密算法 -
魔力猫咪:
chirking 写道魔力猫咪 写道全是测试代码。这个DES类 ...
python实现DES加密算法 -
chirking:
魔力猫咪 写道全是测试代码。这个DES类的实现代码根本没写出来 ...
python实现DES加密算法 -
魔力猫咪:
全是测试代码。这个DES类的实现代码根本没写出来。
python实现DES加密算法
初学python,写了个网络安全课的作业--DES。欢迎拍砖~
ps。试试测试驱动开发,还真有点不习惯...
代码有两段,前面是实现,后面是测试框架。为什么都说全是测试代码呢,我无语。
#coding=utf-8 from functools import partial class DES(object): """ DES加密算法 interface: input_key(s, base=10), encode(s), decode(s) """ __ip = [ 58,50,42,34,26,18,10,2,60,52,44,36,28,20,12,4, 62,54,46,38,30,22,14,6,64,56,48,40,32,24,16,8, 57,49,41,33,25,17, 9,1,59,51,43,35,27,19,11,3, 61,53,45,37,29,21,13,5,63,55,47,39,31,23,15,7, ] __ip1 = [ 40,8,48,16,56,24,64,32,39,7,47,15,55,23,63,31, 38,6,46,14,54,22,62,30,37,5,45,13,53,21,61,29, 36,4,44,12,52,20,60,28,35,3,43,11,51,19,59,27, 34,2,42,10,50,18,58,26,33,1,41, 9,49,17,57,25, ] __e = [ 32, 1, 2, 3, 4, 5, 4 , 5, 6, 7, 8, 9, 8 , 9,10,11,12,13, 12,13,14,15,16,17, 16,17,18,19,20,21, 20,21,22,23,24,25, 24,25,26,27,28,29, 28,29,30,31,32, 1, ] __p = [ 16, 7,20,21,29,12,28,17, 1 ,15,23,26, 5,18,31,10, 2 ,8 ,24,14,32,27, 3, 9, 19,13,30, 6,22,11, 4,25, ] __s = [ [ 0xe,0x4,0xd,0x1,0x2,0xf,0xb,0x8,0x3,0xa,0x6,0xc,0x5,0x9,0x0,0x7, 0x0,0xf,0x7,0x4,0xe,0x2,0xd,0x1,0xa,0x6,0xc,0xb,0x9,0x5,0x3,0x8, 0x4,0x1,0xe,0x8,0xd,0x6,0x2,0xb,0xf,0xc,0x9,0x7,0x3,0xa,0x5,0x0, 0xf,0xc,0x8,0x2,0x4,0x9,0x1,0x7,0x5,0xb,0x3,0xe,0xa,0x0,0x6,0xd, ], [ 0xf,0x1,0x8,0xe,0x6,0xb,0x3,0x4,0x9,0x7,0x2,0xd,0xc,0x0,0x5,0xa, 0x3,0xd,0x4,0x7,0xf,0x2,0x8,0xe,0xc,0x0,0x1,0xa,0x6,0x9,0xb,0x5, 0x0,0xe,0x7,0xb,0xa,0x4,0xd,0x1,0x5,0x8,0xc,0x6,0x9,0x3,0x2,0xf, 0xd,0x8,0xa,0x1,0x3,0xf,0x4,0x2,0xb,0x6,0x7,0xc,0x0,0x5,0xe,0x9, ], [ 0xa,0x0,0x9,0xe,0x6,0x3,0xf,0x5,0x1,0xd,0xc,0x7,0xb,0x4,0x2,0x8, 0xd,0x7,0x0,0x9,0x3,0x4,0x6,0xa,0x2,0x8,0x5,0xe,0xc,0xb,0xf,0x1, 0xd,0x6,0x4,0x9,0x8,0xf,0x3,0x0,0xb,0x1,0x2,0xc,0x5,0xa,0xe,0x7, 0x1,0xa,0xd,0x0,0x6,0x9,0x8,0x7,0x4,0xf,0xe,0x3,0xb,0x5,0x2,0xc, ], [ 0x7,0xd,0xe,0x3,0x0,0x6,0x9,0xa,0x1,0x2,0x8,0x5,0xb,0xc,0x4,0xf, 0xd,0x8,0xb,0x5,0x6,0xf,0x0,0x3,0x4,0x7,0x2,0xc,0x1,0xa,0xe,0x9, 0xa,0x6,0x9,0x0,0xc,0xb,0x7,0xd,0xf,0x1,0x3,0xe,0x5,0x2,0x8,0x4, 0x3,0xf,0x0,0x6,0xa,0x1,0xd,0x8,0x9,0x4,0x5,0xb,0xc,0x7,0x2,0xe, ], [ 0x2,0xc,0x4,0x1,0x7,0xa,0xb,0x6,0x8,0x5,0x3,0xf,0xd,0x0,0xe,0x9, 0xe,0xb,0x2,0xc,0x4,0x7,0xd,0x1,0x5,0x0,0xf,0xa,0x3,0x9,0x8,0x6, 0x4,0x2,0x1,0xb,0xa,0xd,0x7,0x8,0xf,0x9,0xc,0x5,0x6,0x3,0x0,0xe, 0xb,0x8,0xc,0x7,0x1,0xe,0x2,0xd,0x6,0xf,0x0,0x9,0xa,0x4,0x5,0x3, ], [ 0xc,0x1,0xa,0xf,0x9,0x2,0x6,0x8,0x0,0xd,0x3,0x4,0xe,0x7,0x5,0xb, 0xa,0xf,0x4,0x2,0x7,0xc,0x9,0x5,0x6,0x1,0xd,0xe,0x0,0xb,0x3,0x8, 0x9,0xe,0xf,0x5,0x2,0x8,0xc,0x3,0x7,0x0,0x4,0xa,0x1,0xd,0xb,0x6, 0x4,0x3,0x2,0xc,0x9,0x5,0xf,0xa,0xb,0xe,0x1,0x7,0x6,0x0,0x8,0xd, ], [ 0x4,0xb,0x2,0xe,0xf,0x0,0x8,0xd,0x3,0xc,0x9,0x7,0x5,0xa,0x6,0x1, 0xd,0x0,0xb,0x7,0x4,0x9,0x1,0xa,0xe,0x3,0x5,0xc,0x2,0xf,0x8,0x6, 0x1,0x4,0xb,0xd,0xc,0x3,0x7,0xe,0xa,0xf,0x6,0x8,0x0,0x5,0x9,0x2, 0x6,0xb,0xd,0x8,0x1,0x4,0xa,0x7,0x9,0x5,0x0,0xf,0xe,0x2,0x3,0xc, ], [ 0xd,0x2,0x8,0x4,0x6,0xf,0xb,0x1,0xa,0x9,0x3,0xe,0x5,0x0,0xc,0x7, 0x1,0xf,0xd,0x8,0xa,0x3,0x7,0x4,0xc,0x5,0x6,0xb,0x0,0xe,0x9,0x2, 0x7,0xb,0x4,0x1,0x9,0xc,0xe,0x2,0x0,0x6,0xa,0xd,0xf,0x3,0x5,0x8, 0x2,0x1,0xe,0x7,0x4,0xa,0x8,0xd,0xf,0xc,0x9,0x0,0x3,0x5,0x6,0xb, ], ] __k1 = [ 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,52,44,36, 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, ] __k2 = [ 14,17,11,24, 1, 5, 3,28, 15, 6,21,10,23,19,12, 4, 26, 8,16, 7,27,20,13, 2, 41,52,31,37,47,55,30,40, 51,45,33,48,44,49,39,56, 34,53,46,42,50,36,29,32, ] __k0 = [ 1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1, ] __hex_bin = { '0':'0000','1':'0001','2':'0010','3':'0011', '4':'0100','5':'0101','6':'0110','7':'0111', '8':'1000','9':'1001','a':'1010','b':'1011', 'c':'1100','d':'1101','e':'1110','f':'1111', ' ':'0000' } __re = lambda t, s: ''.join(s[i-1] for i in t) __IP = partial(__re, __ip) __IP1 = partial(__re, __ip1) __E = partial(__re, __e) __P = partial(__re, __p) __K1 = partial(__re, __k1) __K2 = partial(__re, __k2) __B = partial( lambda hex_bin, s: ''.join(hex_bin[w] for w in ''.join('%2x' % ord(w) for w in s)) , __hex_bin) __DB = partial( lambda s: ''.join(chr(int(s[i:i+8], 2)) for i in range(0, len(s), 8))) __S = partial( lambda hex_bin, __s, s: ''.join(hex_bin['%x' % __s[i][ int(s[i*6]+s[i*6+5], 2)*16 + int(s[i*6+1:i*6+5], 2)]] for i in range(8)) , __hex_bin, __s) __F = partial( lambda s, k: ''.join('0' if s[i]==k[i] else '1' for i in range(len(s)))) __K0 = partial( lambda k0, K2, k: map(K2, (k[k0[i]:28]+k[0:k0[i]] + k[k0[i]+28:56]+k[28:k0[i]+28] for i in range(16))) , __k0, __K2) __K = partial( lambda K1, K0, k: K0(K1(k)) , __K1, __K0) def __init__(self): pass def input_key(self, key, base=10): if base == 2: pass elif base == 16: key = ''.join(self.__class__.__hex_bin[w] for w in key) else: key = self.__class__.__B(key) self.__k = self.__class__.__K(key) def __code(self, s, k): s = self.__IP(s) l, r = s[0:32], s[32:64] for i in range(16): r_t = r r = self.__E(r) r = self.__F(r, k[i]) r = self.__S(r) r = self.__P(r) r = self.__F(r, l) l = r_t return self.__class__.__IP1(r+l) def encode(self, s): a = '' s += ' ' * ((8-len(s)%8)%8) for i in range(0, len(s), 8): before = self.__class__.__B(s[i:i+8]) after = self.__code(before, self.__k) a += '%16x' % int(after, 2) return ''.join(w if w!=' ' else '0' for w in a) def decode(self, s): a = '' s.lower() for i in range(0, len(s), 16): before = ''.join(self.__class__.__hex_bin[s[j]] for j in range(i, i+16)) after = self.__code(before, self.__k[::-1]) a += self.__class__.__DB(after) return a.rstrip() if __name__ == '__main__': d = DES() d.input_key('密码8位!') s = '这是原文\n' a = d.encode(s) print a b = d.decode(a) print b
#coding=utf-8 import unittest from des import DES class KnownValues(unittest.TestCase): """""" __known_values = (('12345678','ABC我们大家','388a9c61849462e20af277ffe6891072'), ) def test_encode(self): des = DES() for key, before, after in self.__known_values: des.input_key(key) result = des.encode(before) self.assertEqual(after, result) def test_decode(self): des = DES() for key, after, before in self.__known_values: des.input_key(key) result = des.decode(before) self.assertEqual(after, result) class BadInput(unittest.TestCase): """""" __key_inputs = ( ) def test_input_key(self): des = DES() self.assertRaises(IndexError, des.input_key, '1234567', 10) self.assertRaises(IndexError, des.input_key, '123我阿, 4567', 2) self.assertRaises(KeyError, des.input_key, '123我哦哦哦, 4567', 16) def test_encode(self): pass def test_decode(self): des = DES() self.assertRaises(KeyError, des.decode, '123我哦哦哦, 4567') class SanityCheck(unittest.TestCase): """""" """""" __encode_inputs = (('asfd我 ','的萨sa1'), ) __decode_inputs = (('12345678','388a9c61849462e20af277ffe6891072'), ) def test_encode(self): des = DES() for key, before in self.__encode_inputs: des.input_key(key) after = des.encode(before) result = des.decode(after) self.assertEqual(before, result) def test_decode(self): des = DES() for key, before in self.__decode_inputs: des.input_key(key) after = des.decode(before) result = des.encode(after) self.assertEqual(before, result) if __name__ == '__main__': unittest.main()
评论
9 楼
魔力猫咪
2009-07-12
找到毛病了。IE运行脚本太慢,提示可能失去响应的时候停止了脚本。抱歉。
不过为什么后来的部分停止脚本可以看到,第一贴的就不成了呢???
不过为什么后来的部分停止脚本可以看到,第一贴的就不成了呢???
8 楼
chirking
2009-07-12
<div class="quote_title">魔力猫咪 写道</div>
<div class="quote_div">
<div class="quote_title">chirking 写道</div>
<div class="quote_div">
<div class="quote_title">魔力猫咪 写道</div>
<div class="quote_div">全是测试代码。这个DES类的实现代码根本没写出来。</div>
<br>代码有2段,前面的就是DES实现。。。我晕啊</div>
<br>根本没有DES类的代码呀。定义的类都是继承自unittest.TestCase。一看就是单元测试。<br>别告诉我des = DES()就是全部代码。</div>
<p> </p>
<p>我都无语了。DES类难道你看不到?</p>
<p> </p>
<pre name="code" class="python">#coding=utf-8
from functools import partial
class DES(object):
"""
DES加密算法
interface: input_key(s, base=10), encode(s), decode(s)
"""
__ip = [
58,50,42,34,26,18,10,2,60,52,44,36,28,20,12,4,
62,54,46,38,30,22,14,6,64,56,48,40,32,24,16,8,
57,49,41,33,25,17, 9,1,59,51,43,35,27,19,11,3,
61,53,45,37,29,21,13,5,63,55,47,39,31,23,15,7,
]
__ip1 = [
40,8,48,16,56,24,64,32,39,7,47,15,55,23,63,31,
38,6,46,14,54,22,62,30,37,5,45,13,53,21,61,29,
36,4,44,12,52,20,60,28,35,3,43,11,51,19,59,27,
34,2,42,10,50,18,58,26,33,1,41, 9,49,17,57,25,
]
__e = [
32, 1, 2, 3, 4, 5,
4 , 5, 6, 7, 8, 9,
8 , 9,10,11,12,13,
12,13,14,15,16,17,
16,17,18,19,20,21,
20,21,22,23,24,25,
24,25,26,27,28,29,
28,29,30,31,32, 1,
]
__p = [
16, 7,20,21,29,12,28,17,
1 ,15,23,26, 5,18,31,10,
2 ,8 ,24,14,32,27, 3, 9,
19,13,30, 6,22,11, 4,25,
]
__s = [
[
0xe,0x4,0xd,0x1,0x2,0xf,0xb,0x8,0x3,0xa,0x6,0xc,0x5,0x9,0x0,0x7,
0x0,0xf,0x7,0x4,0xe,0x2,0xd,0x1,0xa,0x6,0xc,0xb,0x9,0x5,0x3,0x8,
0x4,0x1,0xe,0x8,0xd,0x6,0x2,0xb,0xf,0xc,0x9,0x7,0x3,0xa,0x5,0x0,
0xf,0xc,0x8,0x2,0x4,0x9,0x1,0x7,0x5,0xb,0x3,0xe,0xa,0x0,0x6,0xd,
],
[
0xf,0x1,0x8,0xe,0x6,0xb,0x3,0x4,0x9,0x7,0x2,0xd,0xc,0x0,0x5,0xa,
0x3,0xd,0x4,0x7,0xf,0x2,0x8,0xe,0xc,0x0,0x1,0xa,0x6,0x9,0xb,0x5,
0x0,0xe,0x7,0xb,0xa,0x4,0xd,0x1,0x5,0x8,0xc,0x6,0x9,0x3,0x2,0xf,
0xd,0x8,0xa,0x1,0x3,0xf,0x4,0x2,0xb,0x6,0x7,0xc,0x0,0x5,0xe,0x9,
],
[
0xa,0x0,0x9,0xe,0x6,0x3,0xf,0x5,0x1,0xd,0xc,0x7,0xb,0x4,0x2,0x8,
0xd,0x7,0x0,0x9,0x3,0x4,0x6,0xa,0x2,0x8,0x5,0xe,0xc,0xb,0xf,0x1,
0xd,0x6,0x4,0x9,0x8,0xf,0x3,0x0,0xb,0x1,0x2,0xc,0x5,0xa,0xe,0x7,
0x1,0xa,0xd,0x0,0x6,0x9,0x8,0x7,0x4,0xf,0xe,0x3,0xb,0x5,0x2,0xc,
],
[
0x7,0xd,0xe,0x3,0x0,0x6,0x9,0xa,0x1,0x2,0x8,0x5,0xb,0xc,0x4,0xf,
0xd,0x8,0xb,0x5,0x6,0xf,0x0,0x3,0x4,0x7,0x2,0xc,0x1,0xa,0xe,0x9,
0xa,0x6,0x9,0x0,0xc,0xb,0x7,0xd,0xf,0x1,0x3,0xe,0x5,0x2,0x8,0x4,
0x3,0xf,0x0,0x6,0xa,0x1,0xd,0x8,0x9,0x4,0x5,0xb,0xc,0x7,0x2,0xe,
],
[
0x2,0xc,0x4,0x1,0x7,0xa,0xb,0x6,0x8,0x5,0x3,0xf,0xd,0x0,0xe,0x9,
0xe,0xb,0x2,0xc,0x4,0x7,0xd,0x1,0x5,0x0,0xf,0xa,0x3,0x9,0x8,0x6,
0x4,0x2,0x1,0xb,0xa,0xd,0x7,0x8,0xf,0x9,0xc,0x5,0x6,0x3,0x0,0xe,
0xb,0x8,0xc,0x7,0x1,0xe,0x2,0xd,0x6,0xf,0x0,0x9,0xa,0x4,0x5,0x3,
],
[
0xc,0x1,0xa,0xf,0x9,0x2,0x6,0x8,0x0,0xd,0x3,0x4,0xe,0x7,0x5,0xb,
0xa,0xf,0x4,0x2,0x7,0xc,0x9,0x5,0x6,0x1,0xd,0xe,0x0,0xb,0x3,0x8,
0x9,0xe,0xf,0x5,0x2,0x8,0xc,0x3,0x7,0x0,0x4,0xa,0x1,0xd,0xb,0x6,
0x4,0x3,0x2,0xc,0x9,0x5,0xf,0xa,0xb,0xe,0x1,0x7,0x6,0x0,0x8,0xd,
],
[
0x4,0xb,0x2,0xe,0xf,0x0,0x8,0xd,0x3,0xc,0x9,0x7,0x5,0xa,0x6,0x1,
0xd,0x0,0xb,0x7,0x4,0x9,0x1,0xa,0xe,0x3,0x5,0xc,0x2,0xf,0x8,0x6,
0x1,0x4,0xb,0xd,0xc,0x3,0x7,0xe,0xa,0xf,0x6,0x8,0x0,0x5,0x9,0x2,
0x6,0xb,0xd,0x8,0x1,0x4,0xa,0x7,0x9,0x5,0x0,0xf,0xe,0x2,0x3,0xc,
],
[
0xd,0x2,0x8,0x4,0x6,0xf,0xb,0x1,0xa,0x9,0x3,0xe,0x5,0x0,0xc,0x7,
0x1,0xf,0xd,0x8,0xa,0x3,0x7,0x4,0xc,0x5,0x6,0xb,0x0,0xe,0x9,0x2,
0x7,0xb,0x4,0x1,0x9,0xc,0xe,0x2,0x0,0x6,0xa,0xd,0xf,0x3,0x5,0x8,
0x2,0x1,0xe,0x7,0x4,0xa,0x8,0xd,0xf,0xc,0x9,0x0,0x3,0x5,0x6,0xb,
],
]
__k1 = [
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,52,44,36,
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,
]
__k2 = [
14,17,11,24, 1, 5, 3,28,
15, 6,21,10,23,19,12, 4,
26, 8,16, 7,27,20,13, 2,
41,52,31,37,47,55,30,40,
51,45,33,48,44,49,39,56,
34,53,46,42,50,36,29,32,
]
__k0 = [
1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1,
]
__hex_bin = {
'0':'0000','1':'0001','2':'0010','3':'0011',
'4':'0100','5':'0101','6':'0110','7':'0111',
'8':'1000','9':'1001','a':'1010','b':'1011',
'c':'1100','d':'1101','e':'1110','f':'1111',
' ':'0000'
}
__re = lambda t, s: ''.join(s[i-1] for i in t)
__IP = partial(__re, __ip)
__IP1 = partial(__re, __ip1)
__E = partial(__re, __e)
__P = partial(__re, __p)
__K1 = partial(__re, __k1)
__K2 = partial(__re, __k2)
__B = partial( lambda hex_bin, s: ''.join(hex_bin[w]
for w in ''.join('%2x' % ord(w) for w in s))
, __hex_bin)
__DB = partial( lambda s: ''.join(chr(int(s[i:i+8], 2)) for i in range(0, len(s),))
__S = partial( lambda hex_bin, __s, s: ''.join(hex_bin['%x' % __s[i][
int(s[i*6]+s[i*6+5], 2)*16 + int(s[i*6+1:i*6+5], 2)]] for i in range(8))
, __hex_bin, __s)
__F = partial( lambda s, k: ''.join('0' if s[i]==k[i] else '1' for i in range(len(s))))
__K0 = partial( lambda k0, K2, k: map(K2,
(k[k0[i]:28]+k[0:k0[i]] + k[k0[i]+28:56]+k[28:k0[i]+28] for i in range(16)))
, __k0, __K2)
__K = partial( lambda K1, K0, k: K0(K1(k))
, __K1, __K0)
def __init__(self):
pass
def input_key(self, key, base=10):
if base == 2:
pass
elif base == 16:
key = ''.join(self.__class__.__hex_bin[w] for w in key)
else:
key = self.__class__.__B(key)
self.__k = self.__class__.__K(key)
def __code(self, s, k):
s = self.__IP(s)
l, r = s[0:32], s[32:64]
for i in range(16):
r_t = r
r = self.__E(r)
r = self.__F(r, k[i])
r = self.__S(r)
r = self.__P(r)
r = self.__F(r, l)
l = r_t
return self.__class__.__IP1(r+l)
def encode(self, s):
a = ''
s += ' ' * ((8-len(s)%8)%8)
for i in range(0, len(s),:
before = self.__class__.__B(s[i:i+8])
after = self.__code(before, self.__k)
a += '%16x' % int(after, 2)
return ''.join(w if w!=' ' else '0' for w in a)
def decode(self, s):
a = ''
s.lower()
for i in range(0, len(s), 16):
before = ''.join(self.__class__.__hex_bin[s[j]] for j in range(i, i+16))
after = self.__code(before, self.__k[::-1])
a += self.__class__.__DB(after)
return a.rstrip()</pre>
<p> </p>
<div class="quote_div">
<div class="quote_title">chirking 写道</div>
<div class="quote_div">
<div class="quote_title">魔力猫咪 写道</div>
<div class="quote_div">全是测试代码。这个DES类的实现代码根本没写出来。</div>
<br>代码有2段,前面的就是DES实现。。。我晕啊</div>
<br>根本没有DES类的代码呀。定义的类都是继承自unittest.TestCase。一看就是单元测试。<br>别告诉我des = DES()就是全部代码。</div>
<p> </p>
<p>我都无语了。DES类难道你看不到?</p>
<p> </p>
<pre name="code" class="python">#coding=utf-8
from functools import partial
class DES(object):
"""
DES加密算法
interface: input_key(s, base=10), encode(s), decode(s)
"""
__ip = [
58,50,42,34,26,18,10,2,60,52,44,36,28,20,12,4,
62,54,46,38,30,22,14,6,64,56,48,40,32,24,16,8,
57,49,41,33,25,17, 9,1,59,51,43,35,27,19,11,3,
61,53,45,37,29,21,13,5,63,55,47,39,31,23,15,7,
]
__ip1 = [
40,8,48,16,56,24,64,32,39,7,47,15,55,23,63,31,
38,6,46,14,54,22,62,30,37,5,45,13,53,21,61,29,
36,4,44,12,52,20,60,28,35,3,43,11,51,19,59,27,
34,2,42,10,50,18,58,26,33,1,41, 9,49,17,57,25,
]
__e = [
32, 1, 2, 3, 4, 5,
4 , 5, 6, 7, 8, 9,
8 , 9,10,11,12,13,
12,13,14,15,16,17,
16,17,18,19,20,21,
20,21,22,23,24,25,
24,25,26,27,28,29,
28,29,30,31,32, 1,
]
__p = [
16, 7,20,21,29,12,28,17,
1 ,15,23,26, 5,18,31,10,
2 ,8 ,24,14,32,27, 3, 9,
19,13,30, 6,22,11, 4,25,
]
__s = [
[
0xe,0x4,0xd,0x1,0x2,0xf,0xb,0x8,0x3,0xa,0x6,0xc,0x5,0x9,0x0,0x7,
0x0,0xf,0x7,0x4,0xe,0x2,0xd,0x1,0xa,0x6,0xc,0xb,0x9,0x5,0x3,0x8,
0x4,0x1,0xe,0x8,0xd,0x6,0x2,0xb,0xf,0xc,0x9,0x7,0x3,0xa,0x5,0x0,
0xf,0xc,0x8,0x2,0x4,0x9,0x1,0x7,0x5,0xb,0x3,0xe,0xa,0x0,0x6,0xd,
],
[
0xf,0x1,0x8,0xe,0x6,0xb,0x3,0x4,0x9,0x7,0x2,0xd,0xc,0x0,0x5,0xa,
0x3,0xd,0x4,0x7,0xf,0x2,0x8,0xe,0xc,0x0,0x1,0xa,0x6,0x9,0xb,0x5,
0x0,0xe,0x7,0xb,0xa,0x4,0xd,0x1,0x5,0x8,0xc,0x6,0x9,0x3,0x2,0xf,
0xd,0x8,0xa,0x1,0x3,0xf,0x4,0x2,0xb,0x6,0x7,0xc,0x0,0x5,0xe,0x9,
],
[
0xa,0x0,0x9,0xe,0x6,0x3,0xf,0x5,0x1,0xd,0xc,0x7,0xb,0x4,0x2,0x8,
0xd,0x7,0x0,0x9,0x3,0x4,0x6,0xa,0x2,0x8,0x5,0xe,0xc,0xb,0xf,0x1,
0xd,0x6,0x4,0x9,0x8,0xf,0x3,0x0,0xb,0x1,0x2,0xc,0x5,0xa,0xe,0x7,
0x1,0xa,0xd,0x0,0x6,0x9,0x8,0x7,0x4,0xf,0xe,0x3,0xb,0x5,0x2,0xc,
],
[
0x7,0xd,0xe,0x3,0x0,0x6,0x9,0xa,0x1,0x2,0x8,0x5,0xb,0xc,0x4,0xf,
0xd,0x8,0xb,0x5,0x6,0xf,0x0,0x3,0x4,0x7,0x2,0xc,0x1,0xa,0xe,0x9,
0xa,0x6,0x9,0x0,0xc,0xb,0x7,0xd,0xf,0x1,0x3,0xe,0x5,0x2,0x8,0x4,
0x3,0xf,0x0,0x6,0xa,0x1,0xd,0x8,0x9,0x4,0x5,0xb,0xc,0x7,0x2,0xe,
],
[
0x2,0xc,0x4,0x1,0x7,0xa,0xb,0x6,0x8,0x5,0x3,0xf,0xd,0x0,0xe,0x9,
0xe,0xb,0x2,0xc,0x4,0x7,0xd,0x1,0x5,0x0,0xf,0xa,0x3,0x9,0x8,0x6,
0x4,0x2,0x1,0xb,0xa,0xd,0x7,0x8,0xf,0x9,0xc,0x5,0x6,0x3,0x0,0xe,
0xb,0x8,0xc,0x7,0x1,0xe,0x2,0xd,0x6,0xf,0x0,0x9,0xa,0x4,0x5,0x3,
],
[
0xc,0x1,0xa,0xf,0x9,0x2,0x6,0x8,0x0,0xd,0x3,0x4,0xe,0x7,0x5,0xb,
0xa,0xf,0x4,0x2,0x7,0xc,0x9,0x5,0x6,0x1,0xd,0xe,0x0,0xb,0x3,0x8,
0x9,0xe,0xf,0x5,0x2,0x8,0xc,0x3,0x7,0x0,0x4,0xa,0x1,0xd,0xb,0x6,
0x4,0x3,0x2,0xc,0x9,0x5,0xf,0xa,0xb,0xe,0x1,0x7,0x6,0x0,0x8,0xd,
],
[
0x4,0xb,0x2,0xe,0xf,0x0,0x8,0xd,0x3,0xc,0x9,0x7,0x5,0xa,0x6,0x1,
0xd,0x0,0xb,0x7,0x4,0x9,0x1,0xa,0xe,0x3,0x5,0xc,0x2,0xf,0x8,0x6,
0x1,0x4,0xb,0xd,0xc,0x3,0x7,0xe,0xa,0xf,0x6,0x8,0x0,0x5,0x9,0x2,
0x6,0xb,0xd,0x8,0x1,0x4,0xa,0x7,0x9,0x5,0x0,0xf,0xe,0x2,0x3,0xc,
],
[
0xd,0x2,0x8,0x4,0x6,0xf,0xb,0x1,0xa,0x9,0x3,0xe,0x5,0x0,0xc,0x7,
0x1,0xf,0xd,0x8,0xa,0x3,0x7,0x4,0xc,0x5,0x6,0xb,0x0,0xe,0x9,0x2,
0x7,0xb,0x4,0x1,0x9,0xc,0xe,0x2,0x0,0x6,0xa,0xd,0xf,0x3,0x5,0x8,
0x2,0x1,0xe,0x7,0x4,0xa,0x8,0xd,0xf,0xc,0x9,0x0,0x3,0x5,0x6,0xb,
],
]
__k1 = [
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,52,44,36,
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,
]
__k2 = [
14,17,11,24, 1, 5, 3,28,
15, 6,21,10,23,19,12, 4,
26, 8,16, 7,27,20,13, 2,
41,52,31,37,47,55,30,40,
51,45,33,48,44,49,39,56,
34,53,46,42,50,36,29,32,
]
__k0 = [
1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1,
]
__hex_bin = {
'0':'0000','1':'0001','2':'0010','3':'0011',
'4':'0100','5':'0101','6':'0110','7':'0111',
'8':'1000','9':'1001','a':'1010','b':'1011',
'c':'1100','d':'1101','e':'1110','f':'1111',
' ':'0000'
}
__re = lambda t, s: ''.join(s[i-1] for i in t)
__IP = partial(__re, __ip)
__IP1 = partial(__re, __ip1)
__E = partial(__re, __e)
__P = partial(__re, __p)
__K1 = partial(__re, __k1)
__K2 = partial(__re, __k2)
__B = partial( lambda hex_bin, s: ''.join(hex_bin[w]
for w in ''.join('%2x' % ord(w) for w in s))
, __hex_bin)
__DB = partial( lambda s: ''.join(chr(int(s[i:i+8], 2)) for i in range(0, len(s),))
__S = partial( lambda hex_bin, __s, s: ''.join(hex_bin['%x' % __s[i][
int(s[i*6]+s[i*6+5], 2)*16 + int(s[i*6+1:i*6+5], 2)]] for i in range(8))
, __hex_bin, __s)
__F = partial( lambda s, k: ''.join('0' if s[i]==k[i] else '1' for i in range(len(s))))
__K0 = partial( lambda k0, K2, k: map(K2,
(k[k0[i]:28]+k[0:k0[i]] + k[k0[i]+28:56]+k[28:k0[i]+28] for i in range(16)))
, __k0, __K2)
__K = partial( lambda K1, K0, k: K0(K1(k))
, __K1, __K0)
def __init__(self):
pass
def input_key(self, key, base=10):
if base == 2:
pass
elif base == 16:
key = ''.join(self.__class__.__hex_bin[w] for w in key)
else:
key = self.__class__.__B(key)
self.__k = self.__class__.__K(key)
def __code(self, s, k):
s = self.__IP(s)
l, r = s[0:32], s[32:64]
for i in range(16):
r_t = r
r = self.__E(r)
r = self.__F(r, k[i])
r = self.__S(r)
r = self.__P(r)
r = self.__F(r, l)
l = r_t
return self.__class__.__IP1(r+l)
def encode(self, s):
a = ''
s += ' ' * ((8-len(s)%8)%8)
for i in range(0, len(s),:
before = self.__class__.__B(s[i:i+8])
after = self.__code(before, self.__k)
a += '%16x' % int(after, 2)
return ''.join(w if w!=' ' else '0' for w in a)
def decode(self, s):
a = ''
s.lower()
for i in range(0, len(s), 16):
before = ''.join(self.__class__.__hex_bin[s[j]] for j in range(i, i+16))
after = self.__code(before, self.__k[::-1])
a += self.__class__.__DB(after)
return a.rstrip()</pre>
<p> </p>
7 楼
魔力猫咪
2009-07-11
chirking 写道
魔力猫咪 写道
全是测试代码。这个DES类的实现代码根本没写出来。
代码有2段,前面的就是DES实现。。。我晕啊
根本没有DES类的代码呀。定义的类都是继承自unittest.TestCase。一看就是单元测试。
别告诉我des = DES()就是全部代码。
6 楼
chirking
2009-07-11
魔力猫咪 写道
全是测试代码。这个DES类的实现代码根本没写出来。
代码有2段,前面的就是DES实现。。。我晕啊
5 楼
魔力猫咪
2009-07-11
全是测试代码。这个DES类的实现代码根本没写出来。
4 楼
chirking
2009-07-08
<div class="quote_title">香克斯 写道</div>
<div class="quote_div">关键不是你的测试代码吧?<br>题目是:实现DES算法<br>这个代码呢?</div>
<p> </p>
<p>不是有2段代码的么。。。上面的是实现,下面的是测试框架</p>
<p> </p>
<div class="quote_div">关键不是你的测试代码吧?<br>题目是:实现DES算法<br>这个代码呢?</div>
<p> </p>
<p>不是有2段代码的么。。。上面的是实现,下面的是测试框架</p>
<p> </p>
3 楼
chirking
2009-07-08
<div class="quote_title">liangguanhui 写道</div>
<div class="quote_div">不是有个pyDES的开源项目吗?</div>
<p>网络安全课的作业,总不能直接交开源项目的代码吧。。。</p>
<p> </p>
<div class="quote_div">不是有个pyDES的开源项目吗?</div>
<p>网络安全课的作业,总不能直接交开源项目的代码吧。。。</p>
<p> </p>
2 楼
香克斯
2009-07-08
关键不是你的测试代码吧?
题目是:实现DES算法
这个代码呢?
题目是:实现DES算法
这个代码呢?
1 楼
liangguanhui
2009-07-08
不是有个pyDES的开源项目吗?
相关推荐
基于Python实现的DES加密算法
这里面是python的使用编程小例子,有图形编程的,有des加密算法的。有md5加密算法的
python实现对称加密中3DES算法工程文件 详解博客地址:https://blog.csdn.net/m0_52316372/article/details/125691581
主要介绍了python实现的DES加密算法和3DES加密算法,以实例形式较为详细的分析了DES加密算法和3DES加密算法的原理与实现技巧,需要的朋友可以参考下
DES加密算法python源码,分放main、rule(变换规则)、function(变换操作)
python实现对称加密中3DES与AES算法工程文件 详解博客地址:https://blog.csdn.net/m0_52316372/article/details/125691581
主要介绍了Python基于DES算法加密解密实现方法,以实例形式分析了DES算法实现加密解密的相关技巧,需要的朋友可以参考下
基于python的对称加密算法des
2. 利用DES源代码实现下面功能: 1. 给定某个Sbox的输入差分情况下,计算所有输入对和所有Sbox输出差分的分布情况 2. 统计DES算法在密钥固定情况,输入明文改变1位、2位,。。。64位时。输出密文位数改变情况。 3...
使用python实现DES加密解密过程,对初学DES算法者有一定帮助。
DEC加密—CBC模式加解密python源码。支持文本的加解密,模块化方便提取复用。
其中 python3.6 Crypto 库的安装方式请参考前面一篇《Python3对称加密算法AES、DES3》 rsa 加解密的库使用 pip3 install rsa 就行了 C:\WINDOWS\system32>pip3 install rsa Collecting rsa Downloading ...
DES 加解密的 Python 实现 环境 使用的 Python 版本是:Python 3.6.3。 无使用其他第三方库,根据密码学实验要求纯手工实现。 使用 加密字符串 在得到的项目文件夹下使用如下命令即可启动 GUI 界面: $ python3 main...
本文实例讲述了python基于pyDes库实现des加密的方法。分享给大家供大家参考,具体如下: 下载及简介地址:https://twhiteman.netfirms.com/des.html 如需要在python中使用des加密,可以直接使用pyDes库加密,该库...
主要介绍了DES加密解密算法之python实现版,图文并茂的为大家分享一下,需要的朋友可以参考下
本文实例讲述了Python3对称加密算法AES、DES3。分享给大家供大家参考,具体如下: python3.6此库安装方式,需要pip3 install pycryptodome。 如有site-packages中存在crypto、pycrypto,在pip之前,需要pip3 ...
DES_encrypt python实现DES加密和解密,具体算法解释欢迎来看我的博客