您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

Python基于DES算法加密解密实例

5b51 2022/1/14 8:18:34 python 字数 4176 阅读 359 来源 www.jb51.cc/python

本文实例讲述了Python基于DES算法加密解密实现方法。分享给大家供大家参考。具体实现方法如下:

概述

本文实例讲述了Python基于DES算法加密解密实现方法分享给大家供大家参考。具体实现方法如下:

#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,58,]  
  __e = [  
    32,]  
  __p = [  
    16,]  
  __s = [  
    [  
    0xe,0x4,0xd,0x1,0x2,0xf,0xb,0x8,0x3,0xa,0x6,0xc,0x5,0x9,0x0,0x7,0xe,],[  
    0xf,[  
    0xa,[  
    0x7,[  
    0x2,[  
    0xc,[  
    0x4,[  
    0xd,]  
  __k1 = [  
    57,]  
  __k2 = [  
    14,]  
  __k0 = [  
    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,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,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 = '再来一段中文'  
  a = d.encode(s)  
  print a 
  b = d.decode(a) 
  print b

希望本文所述对大家的Python程序设计有所帮助。

总结

以上是编程之家为你收集整理的Python基于DES算法加密解密实例全部内容,希望文章能够帮你解决Python基于DES算法加密解密实例所遇到的程序开发问题。


如果您也喜欢它,动动您的小指点个赞吧

除非注明,文章均由 laddyq.com 整理发布,欢迎转载。

转载请注明:
链接:http://laddyq.com
来源:laddyq.com
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


联系我
置顶