一、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: