Python基于DES算法加密解密實(shí)例
本文實(shí)例講述了Python基于DES算法加密解密實(shí)現(xiàn)方法。分享給大家供大家參考。具體實(shí)現(xiàn)方法如下:
#coding=utf-8 from functools import partial import base64 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().decode('utf-8') if __name__ == '__main__': d = DES() d.input_key('123456789') s = '再來(lái)一段中文' a = d.encode(s) print a b = d.decode(a) print b
希望本文所述對(duì)大家的Python程序設(shè)計(jì)有所幫助。
- Python DES加密實(shí)現(xiàn)原理及實(shí)例解析
- Python實(shí)現(xiàn)常見(jiàn)的幾種加密算法(MD5,SHA-1,HMAC,DES/AES,RSA和ECC)
- python DES加密與解密及hex輸出和bs64格式輸出的實(shí)現(xiàn)代碼
- Python Des加密解密如何實(shí)現(xiàn)軟件注冊(cè)碼機(jī)器碼
- DES加密解密算法之python實(shí)現(xiàn)版(圖文并茂)
- Python3對(duì)稱(chēng)加密算法AES、DES3實(shí)例詳解
- Python和Java進(jìn)行DES加密和解密的實(shí)例
- python基于pyDes庫(kù)實(shí)現(xiàn)des加密的方法
- python實(shí)現(xiàn)DES加密解密方法實(shí)例詳解
- python實(shí)現(xiàn)的DES加密算法和3DES加密算法實(shí)例
- python如何實(shí)現(xiàn)DES加密
相關(guān)文章
python中JSON數(shù)據(jù)格式的詳細(xì)使用教程
這篇文章主要給大家介紹了關(guān)于python中JSON數(shù)據(jù)格式的詳細(xì)使用,JSON是一種用于存儲(chǔ)和交換數(shù)據(jù)的語(yǔ)法,JSON是文本,使用JavaScript對(duì)象表示法編寫(xiě),文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-02-02python程序中斷然后接著中斷代碼繼續(xù)運(yùn)行問(wèn)題
這篇文章主要介紹了python程序中斷然后接著中斷代碼繼續(xù)運(yùn)行問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-02-02python+mysql實(shí)現(xiàn)簡(jiǎn)單的web程序
上篇文章我們介紹了簡(jiǎn)單的Python web程序,實(shí)現(xiàn)hello world,本文我們來(lái)結(jié)合一下mysql,實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)的簡(jiǎn)單操作,希望對(duì)大家有所幫助2014-09-09Python xlrd讀取excel日期類(lèi)型的2種方法
這篇文章主要介紹了Python xlrd讀取excel日期類(lèi)型的2種方法,本文同時(shí)講解了xlrd讀取excel某個(gè)單元格的方法,需要的朋友可以參考下2015-04-04django filter過(guò)濾器實(shí)現(xiàn)顯示某個(gè)類(lèi)型指定字段不同值方式
這篇文章主要介紹了django filter過(guò)濾器實(shí)現(xiàn)顯示某個(gè)類(lèi)型指定字段不同值方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-07-07python plt可視化——打印特殊符號(hào)和制作圖例代碼
這篇文章主要介紹了python plt可視化——打印特殊符號(hào)和制作圖例代碼,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-04-04python統(tǒng)計(jì)文章中單詞出現(xiàn)次數(shù)實(shí)例
在本篇文章里小編給大家整理的是關(guān)于python統(tǒng)計(jì)文章中單詞出現(xiàn)次數(shù)實(shí)例,需要的朋友們參考學(xué)習(xí)下。2020-02-02