DES算法加密——python实现

一、DES算法简介

1977年1月美国政府采纳IBM公司设计的方案作为非机密数据的数据加密标准DES。DES自公布以来,一直是国际商用通信和计算机通信最常用的加密算法。原定使用期10年,超期服役到2000年。DES对其后出现的大量分组密码加密算法的设计都产生了很大的影响,他们从中借鉴和吸取了宝贵的经验。

二、基础函数

1、异或运算

def yihuo(s1,s2):#返回s1与s2异或运算后的字符串
    strlen=len(s1)
    s3=[]
    for i in range(0,strlen):
        s3.extend(str(int(s1[i])^int(s2[i])))
    s4="".join(s3)
    return s4

输入s1与s2是等长的二进制字符串,输出s4是s1于s2异或后的二进制字符串,由于python中不能向字符串动态添加元素,这里将异或后的元素存在一个列表(s3)里,之后将列表转换回字符串(s4)。

2、置换

def zhihuan(s,tab):#通过置换表置换s
    #strlen=len(s)#返回的字符串长度以置换表为准
    strlen = len(tab)
    list1=[]
    for i in range(0,strlen):
        j=tab[i]
        list1.extend(str(s[j-1]))
    s1="".join(list1)
    return s1

这里的输入参数s是一个二进制字符串,tab是一个置换表,即将s第i位的字符置换位s的tab[i]位上的字符。

3、循环左移

def zuoyi(s, n):#s循环左移n位
    strlen = len(s)
    n = n % strlen
    list1 = list(s)
    for i in range(0, strlen):
        if i < n:
            list1.extend(list1[0])
            del list1[0]
        else:
            break
    s1 = "".join(list1)
    return s1

循环的方法是将s前n位字符(这里从1开始计数,python里下标从0开始,因此函数中退出条件为i=n)循环移到后面,同时将前面的字符删除;

今天老师讲了三种方法,分别是:

①、上述方法

②、复制

令字符串s=s+s,取新字符串的第n+1位到len(s)+n位,这种方法用含有指针的语言比较好实现

③、取模

4、字节转比特

def bytetobit(n):#字节转比特
    a=[]
    for i in range(0,4):
        a.insert(0,str(n%2))
        n=int(n/2)
    s1="".join(a)
    return s1

字节转比特,即16进制转2进制

三、源代码

def yihuo(s1,s2):#返回s1与s2异或运算后的字符串
    strlen=len(s1)
    s3=[]
    for i in range(0,strlen):
        s3.extend(str(int(s1[i])^int(s2[i])))
    s4="".join(s3)
    return s4

def zhihuan(s,tab):#通过置换表置换s
    #strlen=len(s)#返回的字符串长度以置换表为准
    strlen = len(tab)
    list1=[]
    for i in range(0,strlen):
        j=tab[i]
        list1.extend(str(s[j-1]))
    s1="".join(list1)
    return s1

def zuoyi(s, n):#s循环左移n位
    strlen = len(s)
    n = n % strlen
    list1 = list(s)
    for i in range(0, strlen):
        if i < n:
            list1.extend(list1[0])
            del list1[0]
        else:
  
  • 6
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值