⑴密码位数必须达到一定的长度
⑵密码必须同时包含至少两种以上的字符
⑶定期更换密码
⑷可以设置空密码
①将明文字符串s中的每个字母字符根据它所在该字符串的位置,往后移动相应的位置,并转化为对应的小写或大写字母(例如:大写字母A往后移动5位变成F,转化成小写字母得到f;小写字母y往后移动8位得到g,转化成大写字母得到G),非字母字符不处理,得到新串ss。
②将①得到的新串ss平均切割成两部分,若ss的长度n为奇数,则第一部分长度为n//2+1,第二部分长度为n//2。再将后面一段字母依次逐个插入前一段字符后边,组成一段密文。
例如“Good.Luck!”生成密文过程如下:
①明文字符串s移位和大小写转换过程:
|
下标位置 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
|
原始字符 |
G |
o |
o |
d |
. |
L |
u |
c |
k |
! |
|
向后移动i位 |
H |
q |
r |
h |
. |
R |
b |
k |
t |
! |
|
大小写转换 |
h |
Q |
R |
H |
. |
r |
B |
K |
T |
! |
②将①得到的密文ss平均切割成两部分。
例如将上述①得到的字符串中6~10位置的字符依次逐个连接在1~5字符后面,生成密文如图a所示:
图a
1)若是大写字母,则进行字母替换:英文26个字母按键盘QWERT的顺序排列,从第一行到第三行连接起来再与字母表顺序进行替换,如Q用A来替换,Y用F替换,如下所示:
2)将经过字母替换后的明文每个字符的8位二进制ASCII码(不足8位的左端补0,补足8位)分成两段(左4位一段,右4位为另一段),如字符“A”的二进制ASCII值为01000001,分段后为0100,0001;
3)将高位段(左边4位)转化为十六进制数(如0100转化为4);
4)对低位段(右边4位)执行0→1,1→0后转化为十六进制数(如0001→1110→14→E);
5)依次连接两位十六进制数,得到该字符的密文,如“Q”的密文为“4E”;
6)将每个字符的密文按照明文的顺序依次连接。
程序运行结果如下图所示:
实现上述功能的Python程序如下,请回答下列问题:
def dtb(num): #十进制转8位二进制,高低4位分别处理
i=0;result=""
while i<8:
if i<4:
y=1-num % 2
else:
y=num % 2
num=num//2
result=str(y)+result
i+=1
return result
mw=input("请输入待加密的字符:")
jm=""
mm={"Q":"A","W":"B","E":"C","R":"D","T":"E","Y":"F","U":"G","I":"H","O":"I","P":"J","A":"K","S":"L","D":"M","F":"N","G":"O","H":"P","J":"Q","K":"R","L":"S","Z":"T","X":"U","C":"V","V":"W","B":"X","N":"Y","M":"Z"}
for i in range(len(mw)):
if "A"<=mw[i]<="Z":
else:
jm+=mw[i]
jm1=""
for i in range(len(jm)):
zf="0123456789ABCDEF";result1="";sum=0
for i in :
sum=int(jm1[i])*8+int(jm1[i+1])*4+int(jm1[i+2])*2+int(jm1[i+3])
result1+=zf[sum]
sum=0
print("密文为:",result1)
①将字符的ASCII码用8位二进制表示;
②将转换出来的8位二进制数整体向右移动一位,将最右边移出的一位放到最左边(高位)进行补充;
③每四位进行分组,分别转换成十六进制数;
④转换后的这两个十六进制字符即为加密字符
现有字符“e”(ASCII码为101D),加密后的字符是( )。