DES加密,Tk写的简单的GUI

  1 # -*- coding: UTF-8 -*-
  2 from Tkinter import *
  3 from tkMessageBox import *
  4
  5 ip = [
  6         58,50,42,34,26,18,10,2,60,52,44,36,28,20,12,4,
  7         62,54,46,38,30,22,14,6,64,56,48,40,32,24,16,8,
  8         57,49,41,33,25,17, 9,1,59,51,43,35,27,19,11,3,
  9         61,53,45,37,29,21,13,5,63,55,47,39,31,23,15,7,
 10      ]
 11 ip_1 = [
 12         40,8,48,16,56,24,64,32,39,7,47,15,55,23,63,31,
 13         38,6,46,14,54,22,62,30,37,5,45,13,53,21,61,29,
 14         36,4,44,12,52,20,60,28,35,3,43,11,51,19,59,27,
 15         34,2,42,10,50,18,58,26,33,1,41, 9,49,17,57,25,
 16        ]
 17 e = [
 18         32, 1, 2, 3, 4, 5,
 19         4 , 5, 6, 7, 8, 9,
 20         8 , 9,10,11,12,13,
 21         12,13,14,15,16,17,
 22         16,17,18,19,20,21,
 23         20,21,22,23,24,25,
 24         24,25,26,27,28,29,
 25         28,29,30,31,32, 1,
 26     ]
 27 p = [
 28         16, 7,20,21,29,12,28,17,
 29         1 ,15,23,26, 5,18,31,10,
 30         2 ,8 ,24,14,32,27, 3, 9,
 31         19,13,30, 6,22,11, 4,25,
 32     ]
 33 sbox = [
 34         [
 35         [0xe,0x4,0xd,0x1,0x2,0xf,0xb,0x8,0x3,0xa,0x6,0xc,0x5,0x9,0x0,0x7],
 36         [0x0,0xf,0x7,0x4,0xe,0x2,0xd,0x1,0xa,0x6,0xc,0xb,0x9,0x5,0x3,0x8],
 37         [0x4,0x1,0xe,0x8,0xd,0x6,0x2,0xb,0xf,0xc,0x9,0x7,0x3,0xa,0x5,0x0],
 38         [0xf,0xc,0x8,0x2,0x4,0x9,0x1,0x7,0x5,0xb,0x3,0xe,0xa,0x0,0x6,0xd]
 39         ],
 40         [
 41         [0xf,0x1,0x8,0xe,0x6,0xb,0x3,0x4,0x9,0x7,0x2,0xd,0xc,0x0,0x5,0xa],
 42         [0x3,0xd,0x4,0x7,0xf,0x2,0x8,0xe,0xc,0x0,0x1,0xa,0x6,0x9,0xb,0x5],
 43         [0x0,0xe,0x7,0xb,0xa,0x4,0xd,0x1,0x5,0x8,0xc,0x6,0x9,0x3,0x2,0xf],
 44         [0xd,0x8,0xa,0x1,0x3,0xf,0x4,0x2,0xb,0x6,0x7,0xc,0x0,0x5,0xe,0x9]
 45         ],
 46         [
 47         [0xa,0x0,0x9,0xe,0x6,0x3,0xf,0x5,0x1,0xd,0xc,0x7,0xb,0x4,0x2,0x8],
 48         [0xd,0x7,0x0,0x9,0x3,0x4,0x6,0xa,0x2,0x8,0x5,0xe,0xc,0xb,0xf,0x1],
 49         [0xd,0x6,0x4,0x9,0x8,0xf,0x3,0x0,0xb,0x1,0x2,0xc,0x5,0xa,0xe,0x7],
 50         [0x1,0xa,0xd,0x0,0x6,0x9,0x8,0x7,0x4,0xf,0xe,0x3,0xb,0x5,0x2,0xc]
 51         ],
 52         [
 53         [0x7,0xd,0xe,0x3,0x0,0x6,0x9,0xa,0x1,0x2,0x8,0x5,0xb,0xc,0x4,0xf],
 54         [0xd,0x8,0xb,0x5,0x6,0xf,0x0,0x3,0x4,0x7,0x2,0xc,0x1,0xa,0xe,0x9],
 55         [0xa,0x6,0x9,0x0,0xc,0xb,0x7,0xd,0xf,0x1,0x3,0xe,0x5,0x2,0x8,0x4],
 56         [0x3,0xf,0x0,0x6,0xa,0x1,0xd,0x8,0x9,0x4,0x5,0xb,0xc,0x7,0x2,0xe]
 57         ],
 58         [
 59         [0x2,0xc,0x4,0x1,0x7,0xa,0xb,0x6,0x8,0x5,0x3,0xf,0xd,0x0,0xe,0x9],
 60         [0xe,0xb,0x2,0xc,0x4,0x7,0xd,0x1,0x5,0x0,0xf,0xa,0x3,0x9,0x8,0x6],
 61         [0x4,0x2,0x1,0xb,0xa,0xd,0x7,0x8,0xf,0x9,0xc,0x5,0x6,0x3,0x0,0xe],
 62         [0xb,0x8,0xc,0x7,0x1,0xe,0x2,0xd,0x6,0xf,0x0,0x9,0xa,0x4,0x5,0x3]
 63         ],
 64         [
 65         [0xc,0x1,0xa,0xf,0x9,0x2,0x6,0x8,0x0,0xd,0x3,0x4,0xe,0x7,0x5,0xb],
 66         [0xa,0xf,0x4,0x2,0x7,0xc,0x9,0x5,0x6,0x1,0xd,0xe,0x0,0xb,0x3,0x8],
 67         [0x9,0xe,0xf,0x5,0x2,0x8,0xc,0x3,0x7,0x0,0x4,0xa,0x1,0xd,0xb,0x6],
 68         [0x4,0x3,0x2,0xc,0x9,0x5,0xf,0xa,0xb,0xe,0x1,0x7,0x6,0x0,0x8,0xd]
 69         ],
 70         [
 71         [0x4,0xb,0x2,0xe,0xf,0x0,0x8,0xd,0x3,0xc,0x9,0x7,0x5,0xa,0x6,0x1],
 72         [0xd,0x0,0xb,0x7,0x4,0x9,0x1,0xa,0xe,0x3,0x5,0xc,0x2,0xf,0x8,0x6],
 73         [0x1,0x4,0xb,0xd,0xc,0x3,0x7,0xe,0xa,0xf,0x6,0x8,0x0,0x5,0x9,0x2],
 74         [0x6,0xb,0xd,0x8,0x1,0x4,0xa,0x7,0x9,0x5,0x0,0xf,0xe,0x2,0x3,0xc]
 75         ],
 76         [
 77         [0xd,0x2,0x8,0x4,0x6,0xf,0xb,0x1,0xa,0x9,0x3,0xe,0x5,0x0,0xc,0x7],
 78         [0x1,0xf,0xd,0x8,0xa,0x3,0x7,0x4,0xc,0x5,0x6,0xb,0x0,0xe,0x9,0x2],
 79         [0x7,0xb,0x4,0x1,0x9,0xc,0xe,0x2,0x0,0x6,0xa,0xd,0xf,0x3,0x5,0x8],
 80         [0x2,0x1,0xe,0x7,0x4,0xa,0x8,0xd,0xf,0xc,0x9,0x0,0x3,0x5,0x6,0xb]
 81         ]
 82     ]
 83 hex_bin = {
 84         0x0:‘0000‘,0x1:‘0001‘,0x2:‘0010‘,0x3:‘0011‘,
 85         0x4:‘0100‘,0x5:‘0101‘,0x6:‘0110‘,0x7:‘0111‘,
 86         0x8:‘1000‘,0x9:‘1001‘,0xa:‘1010‘,0xb:‘1011‘,
 87         0xc:‘1100‘,0xd:‘1101‘,0xe:‘1110‘,0xf:‘1111‘
 88           }
 89 bin_hex = {
 90     ‘0000‘:‘0‘,‘0001‘:‘1‘,‘0010‘:‘2‘,‘0011‘:‘3‘,
 91     ‘0100‘:‘4‘,‘0101‘:‘5‘,‘0110‘:‘6‘,‘0111‘:‘7‘,
 92     ‘1000‘:‘8‘,‘1001‘:‘9‘,‘1010‘:‘A‘,‘1011‘:‘B‘,
 93     ‘1100‘:‘C‘,‘1101‘:‘D‘,‘1110‘:‘E‘,‘1111‘:‘F‘
 94           }
 95 hex_s =   {
 96     ‘0‘:‘0000‘,‘1‘:‘0001‘,‘2‘:‘0010‘,‘3‘:‘0011‘,
 97         ‘4‘:‘0100‘,‘5‘:‘0101‘,‘6‘:‘0110‘,‘7‘:‘0111‘,
 98         ‘8‘:‘1000‘,‘9‘:‘1001‘,‘A‘:‘1010‘,‘B‘:‘1011‘,
 99         ‘C‘:‘1100‘,‘D‘:‘1101‘,‘E‘:‘1110‘,‘F‘:‘1111‘
100       }
101 #生成子密钥
102 def Rkey(cipherkey):
103     pc_1 = [
104         57,49,41,33,25,17, 9,
105         1 ,58,50,42,34,26,18,
106         10, 2,59,51,43,35,27,
107         19,11, 3,60,52,44,36,
108         63,55,47,39,31,23,15,
109         7 ,62,54,46,38,30,22,
110         14, 6,61,53,45,37,29,
111         21,13, 5,28,20,12, 4
112        ]
113     pc_2 = [
114         14,17,11,24, 1, 5, 3,28,
115         15, 6,21,10,23,19,12, 4,
116         26, 8,16, 7,27,20,13, 2,
117         41,52,31,37,47,55,30,40,
118         51,45,33,48,44,49,39,56,
119         34,53,46,42,50,36,29,32
120        ]
121     pc = [
122         1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1
123      ]
124
125     k0 = []
126     s = cipherkey
127     for i in range(8):
128         k0.append(s[i])
129         for i in range(len(k0)):
130             k0[i] = bin(int(hex(ord(k0[i])),16))[2:]
131         k = ‘‘
132     for i in range(len(k0)):
133         if len(k0[i]) != 8:
134             k0[i] = (8-len(k0[i]))*‘0‘ + k0[i]
135             k = k+k0[i]
136         k1=‘‘
137         for i in range(56):
138             k1 = k1 +k[pc_1[i]-1]
139     c0 = k1[0:28]
140     d0 = k1[28:]
141     c = []
142     d = []
143     for i in range(16):
144         if i == 0:
145             c.append(c0[pc[i]:]+c0[i])
146             d.append(d0[pc[i]:]+d0[i])
147         else:
148             c.append(c[i-1][pc[i]:]+c[i-1][0:pc[i]])
149             d.append(d[i-1][pc[i]:]+d[i-1][0:pc[i]])
150     K_0 = [] #进行pc_2置换并存到列表K_1中
151     K_1 = []
152     for i in range(16):
153         K_0.append(c[i]+d[i])
154     for i in range(16):
155         s = ‘‘
156         for j in range(48):
157             s = s + K_0[i][pc_2[j]-1]
158         K_1.append(s)
159     return K_1
160 #F函数
161 def des_F(R,Ki):
162     R1 = ‘‘
163     for i in range(48):
164         R1 = R1 + R[e[i]-1]
165     #print R1
166     R2 = ‘‘
167     for i in range(48):
168         if R1[i] == Ki[i]:
169             s = ‘0‘
170         else:
171             s = ‘1‘
172         R2 = R2 + s
173     R3 = []
174     S = [0,6,12,18,24,30,36,42]
175     for i in S:
176         R3.append(R2[i:(i+6)])
177     S1 = ‘‘
178     for i in range(8):
179         row = int((R3[i][0]+R3[i][5]),2)  #hang
180         col = int((R3[i][1:5]),2)         #lie
181         l = sbox[i][row][col]
182
183         S1 = S1 + hex_bin[l]
184     S2 = ‘‘
185     for i in range(32):
186         S2 = S2 +S1[p[i]-1]
187     return S2
188
189 #加密
190
191 def des_Encode(cleartext,cipherkey):
192     K = Rkey(cipherkey)
193     s = str(cleartext)
194     s0 = []
195     for i in range(len(s)):
196         s0.append(bin(int(hex(ord(s[i])),16))[2:])
197     if len(s0) != 8:
198         for i in range((8 - len(s0))):
199             s0.append(‘00000000‘)
200     s1 = ‘‘
201     for i in range(8):
202         if len(s0[i]) != 8:
203             s0[i] = (8-len(s0[i]))*‘0‘ + s0[i]
204         s1 = s1 + s0[i]
205         #初始置换
206     s2 = ‘‘
207     for i in range(64):
208         s2 = s2 + s1[ip[i]-1]
209
210     L0 = s2[0:32]
211     R0 = s2[32:]
212     L = []
213     R = []
214     for i in range(16):
215         if i == 0:
216             L.append(L0)
217             R.append(R0)
218         else:
219             Li = R[i-1]
220             ans = des_F(R[i-1],K[i-1])
221             Ri = ‘‘
222             for j in range(32):
223                 if L[i-1][j] == ans[j]:
224                     ss = ‘0‘
225                 else:
226                     ss = ‘1‘
227                 Ri = Ri + ss
228             L.append(Li)
229             R.append(Ri)
230     ans1 = des_F(R[15],K[15])
231     L_15 = R[14]
232     L_16 = ‘‘
233     #异或
234     for i in range(32):
235         if L_15[i] == ans1[i]:
236             tt = ‘0‘
237         else:
238             tt = ‘1‘
239         L_16 = L_16 + tt
240     R_16 = R[15]
241     C = ‘‘
242     xx =L_16+R_16
243     #逆初始置换
244     for i in range(64):
245         C = C +(xx)[ip_1[i]-1]
246     #转换为16进制
247     binhex = [0,4,8,12,16,20,24,28,32,36,40,44,48,52,56,60]
248     binbox = []
249     for i in binhex:
250         binbox.append(C[i:(i+4)])
251     C_hex = ‘‘
252     for i in range(16):
253         C_hex = C_hex + str(bin_hex[binbox[i]])
254
255     return C_hex
256 #解密
257 def des_Decode(ciphertext,cipherkey):
258     text = ciphertext
259     K_l = Rkey(cipherkey)
260     K_list =[]
261     for i in range(16):
262         K_list.append(K_l[15-i])
263
264     text1 = ‘‘
265     for i in text:
266         text1 = text1 + hex_s[i]
267     text2 = ‘‘
268     for i in range(64):
269         text2 = text2 + text1[ip[i]-1]
270     L0 = text2[0:32]
271     R0 = text2[32:]
272     L = []
273     R = []
274     for i in range(16):
275         if i == 0:
276             L.append(L0)
277             R.append(R0)
278         else:
279             L_next = R[i-1]
280             R_1 = des_F(R[i-1],K_list[i-1])
281             R_next = ‘‘
282             for j in range(32):
283                 if L[i-1][j] == R_1[j]:
284                     s = ‘0‘
285                 else:
286                     s = ‘1‘
287                 R_next = R_next +s
288             L.append(L_next)
289             R.append(R_next)
290     L16 = ‘‘
291     ans2 = des_F(R[15],K_list[15])
292     for i in range(32):
293         if L[15][i] == ans2[i]:
294             ss = ‘0‘
295         else:
296             ss = ‘1‘
297         L16 = L16 + ss
298     R16 = R[15]
299     L_R = L16 + R16
300     m_bin = ‘‘
301     for i in range (64):
302         m_bin = m_bin + L_R[ip_1[i]-1]
303     bin_list = [0,8,16,24,32,40,48,56]
304     asc_list = []
305     for i in bin_list:
306         asc_list.append(int(m_bin[i:(i+8)],2))
307     m_string = ‘‘
308     for i in asc_list:
309         m_string = m_string + chr(int(i))
310     return m_string
311
312 class window():
313     def __init__(self,top):
314         top.title(‘Des  v1.0‘)
315         top.geometry(‘560x380+500+200‘)
316         #top.iconbitmap(‘G:/1.ico‘)
317         top.resizable(0,0)
318         label1 = Label(top,text = (‘明      文:‘).decode(‘utf-8‘))
319         label1.place(x=0,y=4)
320         self.t = StringVar()
321         self.entry1 = Entry(top,width = 80,textvariable = self.t)
322         self.entry1.place(x=70,y=5)
323         label2 = Label(top,text = (‘密      钥:‘).decode(‘utf-8‘))
324         label2.place(x=0,y=32)
325         self.entry2 = Entry(top,width = 80)
326         self.entry2.place(x=70,y=33)
327         self.button1 = Button(top,text = (‘加 密‘).decode(‘utf-8‘),width = 10,height = 1,command = self.Encode_button)
328         self.button1.place(x=70,y=63)
329         self.button2 = Button(top,text = (‘解 密‘).decode(‘utf-8‘),width = 10,height = 1,command = self.Decode_button)
330         self.button2.place(x=160,y=63)
331         self.button3 = Button(top,text = (‘显示子密钥‘).decode(‘utf-8‘),width = 10,height = 1,command = self.Show_key)
332         self.button3.place(x=250,y=63)
333         self.button4 = Button(top,text = (‘清空密钥‘).decode(‘utf-8‘),width = 10,height = 1,command = self.Clear_text)
334         self.button4.place(x=340,y=63)
335         label3 = Label(top,text = (‘密      文:‘).decode(‘utf-8‘))
336         label3.place(x=0,y=93)
337         self.e = StringVar()
338         self.entry3 = Entry(top,width = 80,textvariable=self.e)
339         self.entry3.place(x=70,y=93)
340         label4 = Label(top,text = (‘子 密 钥:‘).decode(‘utf-8‘))
341         label4.place(x=0,y=123)
342         self.text2=Text(top,selectbackground = ‘gray‘,selectforeground = ‘red‘,width = 60)
343         self.text2.place(x=70,y=123)
344     def Encode_button(self):
345         try:
346             clear_text = self.entry1.get()
347             cipher_key = self.entry2.get()
348             text_list = []
349             if (len(clear_text)/8)*8 != len(clear_text):
350                 for i in range((len(clear_text)/8)):
351                     text_list.append(clear_text[i*8:(i+1)*8])
352                 text_list.append(clear_text[(len(clear_text)/8)*8:])
353             else:
354                 for i in range((len(clear_text)/8)):
355                     text_list.append(clear_text[i*8:(i+1)*8])
356             ans =‘‘
357             for i in text_list:
358                 ans = ans + des_Encode(i,cipher_key)
359             self.e.set(ans)
360
361         except:
362             showwarning(‘Warning‘,‘Error!‘)
363     def Show_key(self):
364         try:
365             cipher_key = self.entry2.get()
366             key = Rkey(cipher_key)
367             for i in range(16):
368                 self.text2.insert(END,‘K‘+str(i+1)+‘: ‘+key[i]+‘\n‘)
369
370         except:
371             showwarning(‘Warning‘,‘Error!‘)
372     def Clear_text(self):
373         self.text2.delete(1.0,END)
374     def Decode_button(self):
375         try:
376             cipher_text = self.entry3.get()
377             cipher_key = self.entry2.get()
378             mingwen = des_Decode(cipher_text,cipher_key)
379             self.t.set(mingwen)
380         except:
381             showwarning(‘Warning‘,‘Error!‘)
382
383 top = Tk()
384 window = window(top)
385 top.mainloop()
时间: 2024-08-06 03:32:51

DES加密,Tk写的简单的GUI的相关文章

Java开发经验分享之JAVA简单实现DES加密与实现DES解密

前言:相信很多小伙伴在开发过程中都会加密问题.当然,小菜在开发中也遇到了,这里呢,小菜想说的是JAVA简单实现DES加密. 今天就简单实现一下如何DES加密解密.话不多说,代码如下.直接可用.希望能成为你项目中的一个很好的工具类. public class DesEncrypt { // DES加密密钥key public static String key = "sdfDA12r3JHV214IJrwerDSO892BK2345nrekk35oewr4wrwrenlklknsdlemifzkw

IOS-plist文件DES加密

转载请说明出处:http://www.cnblogs.com/gexun/p/3705207.html,谢谢. 这些天一直在做一个知识问答的项目,因为初赛的项目题目比较少,所以题目就写在本地的plist文件里面了,直接读取就可以了. 公司PM担心题目泄露,所以要我们给plist文件加密,这下可把我搞残了,因为我从来没搞过加密,网上查了很多资料,都是简单的字符串加密,没有专门对plist文件加密,后来实在没办法,请教了公司里的大神,最后搞定了.特地在这里把方法告诉跟我一样的ios菜鸟,希望对你有所

DES加密模式详解

DES加密模式详解 http://www.cnblogs.com/Lawson/archive/2012/05/20/2510781.html http://www.blogjava.net/wayne/archive/2011/05/23/350879.html 加密算法常见的有ECB模式和CBC模式: ECB模式:电子密本方式,这是JAVA封装的DES算法的默认模式,就是将数据按照8个字节一段进行DES加密或解密得到一段8个字节的密文或者明文,最后一段不足8个字节,则补足8个字节(注意:这里

des加密解密——java加密,php解密

最近在做项目中,遇到des加密解密的问题. 场景是安卓app端用des加密,php这边需要解密.之前没有接触过des这种加密解密算法,但想着肯定会有demo.因此百度,搜了代码来用.网上代码也是鱼龙混杂,好不容易测试在php这边测试加密和解密成功了.为确保安卓app端提交过来的加密参数能够解密出来,给定安卓人员一个字符串,让他们把des加密后的字符串给我,在php这边解密.结果一看,加密出来的字符串跟我这边加密出来的结果不一致,自然是解密不出来. 要来java的des算法代码,研究加密的过程,其

关于 Des加密(Android与ios 与后台java服务器之间的加密解密)

关于 Des加密(Android与ios  与后台java服务器之间的加密解密) http://blog.sina.com.cn/s/blog_7c8dc2d50101id91.html (2013-04-17 11:47:23)   分类: iPhone开发 最近做了一个移动项目,是有服务器和客户端类型的项目,客户端是要登录才行的,登录的密码要用DES加密,服务器是用Java开发的,客户端要同时支持多平台(Android.iOS),在处理iOS的DES加密的时候遇到了一些问题,起初怎么调都调不

【Android开发经验】如何保证Android与服务器的DES加密保持一致

转载请注明出处:http://blog.csdn.net/zhaokaiqiang1992 在我们的应用程序涉及到比较敏感的数据的时候,我们通常会对数据进行简单的加密.在与服务器之间的数据交互中,除了可以使用post请求来增强数据的安全性之外,我们可以使用常见的加密算法,对数据进行加密.今天主要介绍的是DES加密算法. 首先,DES属于一种对称的加密算法,所谓对称,就是说加密和解密使用的都是同一个密钥,那么在我们实际应用的时候,就是指服务器和客户端进行加密解密的时候,使用的是一个相同的密钥.除此

python基础-简单的GUI界面

采用tkinter实现了几个简单的GUI界面 调用tkinter的方式非常简单,只需要如下几行代码 1 import Tkinter 2 top = Tkinter.Tk() 3 # Code to add widgets will go here... 4 top.mainloop() 使用Button import Tkinter import tkMessageBox top = Tkinter.Tk() #add a function def hello(): tkMessageBox.

关于Objective-c和Java下DES加密保持一致的方式

转载自:http://www.cnblogs.com/janken/archive/2012/04/05/2432930.html 最近做了一个移动项目,是有服务器和客户端类型的项目,客户端是要登录才行的,登录的密码要用DES加密,服务器是用Java开发的,客户端要同时支持多平台(Android.iOS),在处理iOS的DES加密的时候遇到了一些问题,起初怎么调都调不成和Android端生成的密文相同.最终一个忽然的想法让我找到了问题的所在,现在将代码总结一下,以备自己以后查阅. 首先,Java

DES加密实现(翻译自书籍《Wiley.Implementing.SSL.TLS.Using.Cryptography.and.PKI》)

理解BlockCipher加密算法 凯撒大帝被认为是最古老的对称加密算法.所谓的凯撒加密法(你也许可以从报纸上找到一个作为消遣来玩),它随机的给每一个字母分配一个数字.在这个简单的算法当中,字母到数字的映射就是key.现代加密算法比凯撒算法肯定复杂的多,以便抵御来自计算机的攻击.尽管基本原理是一样,替换一个字母或其它什么东西为另外一个字母或其它什么东西,后续都对替换后的东西进行处理,在几个世纪以来,更多的混淆和扩散(confusion and diffusion)要素被加入,从而创建了现代加密算