1. 小明编写了一个将用户名通过加密生成密码的程序。用户名由小写字母和数字组成,加密的规则是:将用户名分成4位1组,按照密钥k分别做前移,其中字母在a到z之间循环前移,数字在0到9之间循环前移,密钥k的值为1到4之间的不重复随机整数(密钥k可以循环使用)。例如用户名为“abc3dey”,密钥k=[4,3,2,1],则生成的密码为“wya2zbw”。

名称

含义

random.randint(a,b)

随机产生一个[a,b]范围内的实数

random.choice(seq)

从序列seq中随机挑选一个元素

random.shuffle(seq)

将序列seq的所有元素随机排序

(1) 根据题意,若输入用户名为“jqd25k”,密钥k=[1,4,2,3],则生成的密码是
(2) 以下程序实现输入用户名,输出生成的密码,请在划线处填入合适的代码。

import random

k=[1,2,3,4]

random.shuffle(k)

s=list(input("请输入用户名:"))

for i in range(len(s)):

   

    if "0"<=s[i]<="9":

        s[i]=str((int(s[i])-k[t])%10)

    elif  "a"<=s[i]<="z":

        s[i]=chr()

        password="".join(s)   # join() 方法用于将序列中的元素以指定的字符连接生成一个新的字符串

print("你的密码为:",password)

(3) 为了提高密码的安全等级,小明对上述代码进行了改进,若生成的密码只有一种类型的字符组成,则从特殊字符“!@#$%&”中随机选取一个字符作为密码的最后一位,例如生成的密码为“abcd”,则最终的密码可能为“abcd@”。python程序如下,请在划线处填入合适的代码。

code="!@#$%&"

#isalpha():用于判断字符串是否全部为字母

#isdigit():用于判断字符串是否全部为数字

if password.isalpha( ) or password.isdigit():

password=

print("你的密码为:",password)

【考点】
加密与解密算法;
【答案】

您现在未登录,无法查看试题答案与解析。 登录
综合题 普通
能力提升
换一批
1. 某明文字符串仅由大、小写英文字母组成,为实现加密,小明依次对该明文中的每个字符进行如下操作:

①将明文中每个字符转换成其对应的十进制ASCII码值;

②明文的密钥由0-7这8个数字循环产生,如图-1所示;

图-1

③加密过程中,先将每个明文字符的十进制ASCII码值转换成8位二进制数,再将每个字符对应的密钥转换为4位二进制数,最后,将由明文字符的十进制ASCII码值转换成的8位二进制数中的左边4位二进制数和右边4位二进制数,分别和由密钥数字转换成的4位二进制数逐位进行异或运算:1⊕1=0,1⊕0=1,0⊕1=1,0⊕0=0。

例如:明文字符串“Programming”中字母“a”用二进制表示是01100001,其对应的密钥是数字5,用二进制表示是0101,加密后结果是00110100,如图-2所示。

图-2

④将每个字符的加密结果按行输出,如图-3所示。请回答下列问题:

(1) 输入字符串“China”,则字符“a”加密后的结果为
(2) 实现上述功能的Python代码段如下,划线处代码为

s=input("输入待加密的原文:  ")

k=0 ; s1="" ; s2=""

print("加密结果为:  ")

for i in range(0,len(s)):

    ch= ord(s[i])

    m=k

    for j in range(0,4):

        t1=str((ch%2+m%2)%2)

        t2=          

        s1=t1+s1 ; s2=t2+s2

        ch=ch//2 ; m=m//2

    print(s2+s1)

    s1="" ; s2=""

   

图-3

(3) 加框处的代码有错误,请修改:
综合题 普通
2. 某字符串加密程序,其功能是:输入一个仅由小写英文字母组成的字符串,输出加密后的密文,加密规则如下所述:

①将明文字符串分成3个字符一组,对每组字符进行②③处理,剩余不足3个的字符不做处理。

②随机产生由26个不重复的小写英文字母组成的密文串,将明文中的每组字符分别替换为密文串中对应的字符,若密文串如表1所示,则明文“abcdefghijkl”替换为“jpgntkwmaery”。

小写字母

a

b

c

d

e

f

g

h

i

j

k

l

m

n

o

p

q

r

s

t

u

v

w

x

y

z

密文串

j

p

g

n

t

k

w

m

a

e

r

y

l

d

c

q

f

i

x

u

h

z

b

o

v

s

表 1

③输入一串数字密钥(由1~9数字组成),密钥中每个数字依次为每组字符向右旋转次数,若密钥长度不足,则重复使用密钥,数字与对应旋转次数见表2。例如,数字密钥为“45”,则将第1组字符向右旋转1次,如“jpg”>“gjp”,将第2组字符向右旋转2次,如“ntk”>“knt”>“tkn”,第3组字符向右旋转1次,第4组字符向右旋转2次,依次类推。

数字

1

2

3

4

5

6

7

8

9

旋转次数

1

2

3

1

2

3

1

2

3

表 2

④将每组处理后的字符串顺序连接, 每组之间用“*”作为间隔符号, 再将分组剩余的字符倒序 连接, 得到密文。

程序运行结果如下:

(1) 若明文为“abc”,随机产生的密文串如图所示,数字密钥为“13”,则密文为
(2) 实现上述功能的Python程序如下,请在划线处填入合适的代码。
def jmdic():      #随机生成由26 个不重复的小写英文字母组成的密文串
#返回密文字符串,代码略
def rotate(array,k):  #旋转
    for i in range(k):
        temp=array[len(array)-1]
        for j in range( ):
            array[j+1]=array[j]
            array[0]=temp
ming=input("请输入明文:")
mkey=input("请输入一串数字密钥: ")
n=len(ming);m=len(mkey)
a=[]
dic=jmdic()
print("26 个小写字母对应的密文串:",dic)
for i in range(n//3):     #对每组字符进行处理
    a.append([])  #append():在列表末尾添加元素
    for j in range(3):
        a[i].append( dic[] )
    keynum=
    k=(keynum-1)%3+1
    rotate(a[i],k)
ans=""
for i in range(n//3): #将每组字符进行连接
    for j in range(3):
       
    ans+="*"*(i+1)
ans=ming[i*3+3:]+ans
print("密文为: ",ans)
(3) 加框处代码有错,请更正。
综合题 困难
3. 在计算机中存储用户密码时,为了提高数据的安全性,往往需要对密码进行加密后再存储。密文是加了密的文字,明文是加密之前的文字。小明编写程序,对输入的密码进行强度检测和加密处理。密码强度的检测方法为:若密码包含两种及以上的字符(数字、字母及其他字符中的任意两种),则密码强度为“强”;否则密码为弱。加密处理方法为:

1) 数字字符后移2位,即“1”→“3”“2”→“4” ……“8”→“0”“9”→“1”。

2)小写字母转换大写字母。

3)大写字母转换为小写字母。

4)其他字符不变。程序运行结果如下所示:

请输入你的密码:sunDAY-1289

密码强度高!

加密后的密文为:SUNday- 3401

(1) 若输入密码为“GithUB890”,则加密后的密文为:
(2) 实现上述功能的Python程序如下,请在划线处填入合适的代码。

mw =input(' 请输入你的密码: ')

c=''

f1=f2=f3=0      #初值均为0

for x in mw:

    if

        f1=1

    elif 'a' <= x <= ' z' or 'A'<=x<='z':

        f2=1

    else:

        f3=1

if

    print('密码强度高! '

else:

    print('密码强度弱! ')

for ch in mw:

    if '0'<= ch <= '9' :

        c += str( (int (ch)+2) %10)

    elif'a'<=ch<='z':

       

    elif'A'<=ch<='z':

        c += chr (ord(ch) + 32)

    else:

        c+=ch

print ('加密后的密文为:)

综合题 困难