加密与解密算法 知识点题库

给定一字符串(全部由小写字母组成),有n个字符(1≤n≤100),将每个字符存入到数组a中,有以下两种操作:

操作1:在文本框中分别输入L,R,T(1≤L≤R≤n),对数组下标为L到R之内(包含L和R)的字符做相应的字符加密操作(1≤T≤100)。

操作2:在文本框中输入M(1≤M≤n),在标签中输出a(M)的值。

为了提高算法的效率,小明设计了如下算法,以n=10为例,将n个元素依次分成 段( 表示对 向下取整),每段的元素个数为 ,若最后有不足 个元素,则自成一段。给每段设置一个标记,如下表所示。

①对于操作1,若输入的L,R属于同一段,则直接对a(L to R)的每个元素的ASCII码进行后移T位的操作。如输入4,6,3,则第2段中的每个字符变为k,r,q,操作后如下表所示。

②对于操作1,若输入的L,R不属于同一段,则对元素a(L)所在段中从a(L)开始到该段最后一个元素为止的每个字符的ASCII码做后移T位的操作,并对元素a(R)所在段中从该段第一个元素开始到a(R)为止的每个字符的ASCII码做后移T位的操作,对a(L)元素所在段的下一段开始到a(R)元素所在段的上一段为止的每个段标记值增加T,这些段中的元素值保持不变。如在上表的基础_上再输入1,8,2,则第1段的3个字符和第3段中的前2个数都做相应的字符后移2位的操作,第2段的段标记值增加2,如下表所示。

③对于操作2,若输入M的值为4,则输出a(4)的值,若a(M)所在的段标记为奇数,a(M)的值为该数组元素的值,否则输出a(M)对应的大写字母的值,如a(4)=H。程序运行如下。请回答下列问题:

  1. (1) 若数组元素为“p,y,t,h,o,n,j,a,v,a”,依次进行以下3次操作后a(6)的值为

    操作1:在文本框Text1,Text2,Text3中依次输入1,8,3后,点击按钮Command1

    操作1:在文本框Text1,Text2,Text3中依次输入7,9,2后,点击按钮Command1

    操作2:在文本框Text4中输入6后,点击按钮Command2

  2. (2) 请在划线处填入合适的代码。

    Const n=10

    Dim a(1 To n)As String

    Dim dbj(1 To n)As Integer    ‘依次表示每段的标记值

    Dim bk As Integer       ‘表示每段的元素个数.

    Private Sub Form_Lond()

      bk = Int(Sqr(n))

      ‘读取数据,并存储到数组a中,代码略

      ‘读取数据,并存储到数组dbj中,代码略

    End Sub

    Function bl(x As Integer)As Integer   ‘bl函数返回数组元素a(x)的段编号

      bl=

    End Function

    Private Sub Command1_Click()

      Dim L Ax Integer, R As Integer, t As Integer

      L= Val(Text1.Text)

      R= Val(Text2.Text)

      t= Val(Text3.Texr)

      If bl(L)= bl(R) Then

        For i =L To R

          a(i)= Chr((Ase(a(i))- Ase("a")+t) Mod 26+97)

        Next i

      Else

        For i=L To bl(L)*bk

          a(i) = Chr((Ase(a(i))- Ase("a")+1) Mod 26+97)

      Next i

    For i= bl(L)+ 1 To bl(R)-1

      dbj(i) = dbj(i) + t

    Next i

    For i =

          a(i) = Chr((Ase(a(i))-Ase("a") + 1) Mod 26 + 97)

        Next i

      End If

      List1. AddItem Str(L) +"," + Str(R) + "," + Str(t) +“加密完成!”

    End Sub

    Private Sub Command2_Click( )

      Dim M As Integer

      Dim jg As Suring

      M= Val(Text4. Tex1)

      If dbj(bl(M)) Mod2 = 0 Then

        Jg=

      Else

        jg= a(M)

      End If

    Labell. Caption =“经过一 系列操作后. a(” + Str(M) +“)的值为:“+ ig

    End Sub

大写字母分段加密。输入n(n≤50)个大写字母组成的原文字符串,以规模m为一段进行加密。加密方法为:(1)找出每段中最长的连续递增子串长度max;(2)将该段每个字符后移max位进行加密,如果后移后的字母ASCII码值超过90(Asc("Z")=90),则从小写字母“a”(ASCII码值为97)开始表示;(3)规模不足m部分不做处理。

例如:n=10,原文字符串为“ABCXYEFDOK”,m=4时,处理过程如下:

其中,第1段中字母“X”后移4位后超过字母“Z”的ASCII码值,用“b”表示,第2段中字母“Y”后移2位用“a”表示用VB编写程序,程序运行时,在文本框Text1中输入原文字符串,在文本框Text2中输入每段个数,单击“加密”按钮Command1后,在文本框Text3中显示加密结果。程序运行界面如图所示。

实现上述功能的VB程序如下,请回答下列问题:

  1. (1) 已知加密结果是“RaVJON”,m=4,根据上述加密规则,推得原文是
  2. (2) 请在划线处填入合适的代码。

    Dim a(0 To 50) As String, b(1 To 50) As Integer

    Private Sub Command1_Click ()

    Dim i As Integer, j As Integer, k As Integer, m As Integer, max As Integer

    n = Len(Text1. Text)

    For i=1 To n

      a(i) = Mid(Text1.Text, i, 1)

      b(i) =

    Next i

    m=Val (Text2. Text)

    max=1

    For k=1 To n\m

      For i=(k-1)*m+2 To k*m

        j=i

        Do while

          b(i)=b(i)+1

          j=j-1

        Loop

        If b(i)>max Then

          max = b(i)

        End If

      Next i

      For i=(k-1)*m+1 To k*m

        s =s+ mingtoni (a(i), max)

      Next i

      max=1

    Next k

    If n Mod m <> 0 Then

      For i=(n\m)*m+1 To n

        s=s+ a(i)

      Next i

    End If

    Text3.Text = s

    End Sub

    Function mingtomi(e As String, d As Integer) As String

      If Ase(c) + d > Asc("Z") Then

       

      Else

        mingtomi = Chr(Asc(c) + d)

      End If

    End Function

某密文是由一串数字加密得到,其解密规则是:①对连续重复的大写字母,仅保留1个;②在去重后的文本中,从首字符开始间隔5个字符取1个,依次连接取出的字符,即为明文。

编写解密的VB程序,功能如下:在文本框Text1中输入密文,单击“解密”按钮Command1,在文本框Text2中显示去重后的文本,并在标签Label1中显示明文。程序运行界面如下图所示。

  1. (1) 实现上述功能的VB程序如下,请在划线处填入合适的代码。

    Private Sub Command1_Click()

    Dim s1 As String, s2 As String, c As String, mw As String

    Dim i As Integer

    s1 = Text1.Text

    s2 = Mid(s1, 1, 1)

    For i = 2 To

      c = Mid(s1, i, 1)

      If c >= "A" And c <= "Z" Then

        If  Then s2 = s2 + c

        Else

          s2 = s2 + c

        End If

    Next i

    mw = " "

    i = 6

    Do While i <= Len(s2)

      mw = mw+Mid(s2, i, 1)

     

    Loop

    Text2.Text = s2

    Label1.Caption = mw

    End Sub

  2. (2) 若密文为“XXXX923JBBBYYYY##43aG544Zo$$a0ZZZSSS@wwwIiwf3fYYYrinns”,则相对应的明文为
维吉尼亚(Vigenere)密码。如下图所示,分别用行和列表示待加密的字符(明文)和当前字符的密钥,行和列的交叉点的字符即为加密后的结果(密文)。在加密时,密文与明文的字母大小写形式保持一致,如,明文字母为大写,则加密后的密文字母也为大写;当密钥长度不足时重复使用密钥。例如:当明文M=HelloWorld,密钥K=abc时,密文C=HfnlpYosnd。运算过程如下所示:

明文:HelloWorld

密钥:abcabcabca

密文:HfnlpYosnd

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

A

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

B

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

A

C

C

D

E

F

G

H

I

J

K

L

M

N

O

P

Q

R

S

T

U

V

W

X

Y

Z

A

B

D

D

E

F

G

H

I

J

K

L

M

N

O

P

Q

R

S

T

U

V

W

X

Y

Z

A

B

C

E

E

F

G

H

I

J

K

L

M

N

O

P

Q

R

S

T

U

V

W

X

Y

Z

A

B

C

D

F

F

G

H

I

J

K

L

M

N

O

P

Q

R

S

T

U

V

W

X

Y

Z

A

B

C

D

E

G

G

H

I

J

K

L

M

N

O

P

Q

R

S

T

U

V

W

X

Y

Z

A

B

C

D

E

F

H

H

I

J

K

L

M

N

O

P

Q

R

S

T

U

V

W

X

Y

Z

A

B

C

D

E

F

G

I

I

J

K

L

M

N

O

P

Q

R

S

T

U

V

W

X

Y

Z

A

B

C

D

E

F

G

H

J

J

K

L

M

N

O

P

Q

R

S

T

U

V

W

X

Y

Z

A

B

C

D

E

F

G

H

I

K

K

L

M

N

O

P

Q

R

S

T

U

V

W

X

Y

Z

A

B

C

D

E

F

G

H

I

J

L

L

M

N

O

P

Q

R

S

T

U

V

W

X

Y

Z

A

B

C

D

E

F

G

H

I

J

K

M

M

N

O

P

Q

R

S

T

U

V

W

X

Y

Z

A

B

C

D

E

F

G

H

I

J

K

L

N

N

O

P

Q

R

S

T

U

V

W

X

Y

Z

A

B

C

D

E

F

G

H

I

J

K

L

M

O

O

P

Q

R

S

T

U

V

W

X

Y

Z

A

B

C

D

E

F

G

H

I

J

K

L

M

N

P

P

Q

R

S

T

U

V

W

X

Y

Z

A

B

C

D

E

F

G

H

I

J

K

L

M

N

O

Q

Q

R

S

T

U

V

W

X

Y

Z

A

B

C

D

E

F

G

H

I

J

K

L

M

N

O

P

R

R

S

T

U

V

W

X

Y

Z

A

B

C

D

E

F

G

H

I

J

K

L

M

N

O

P

Q

S

S

T

U

V

W

X

Y

Z

A

B

C

D

E

F

G

H

I

J

K

L

M

N

O

P

Q

R

T

T

U

V

W

X

Y

Z

A

B

C

D

E

F

G

H

I

J

K

L

M

N

O

P

Q

R

S

U

U

V

W

X

Y

Z

A

B

C

D

E

F

G

H

I

J

K

L

M

N

O

P

Q

R

S

T

V

V

W

X

Y

Z

A

B

C

D

E

F

G

H

I

J

K

L

M

N

O

P

Q

R

S

T

U

W

W

X

Y

Z

A

B

C

D

E

F

G

H

I

J

K

L

M

N

O

P

Q

R

S

T

U

V

X

X

Y

Z

A

B

C

D

E

F

G

H

I

J

K

L

M

N

O

P

Q

R

S

T

U

V

W

Y

Y

Z

A

B

C

D

E

F

G

H

I

J

K

L

M

N

O

P

Q

R

S

T

U

V

W

X

Z

Z

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

依据上述算法描述设计了如下VB程序。请回答下列问题:

  1. (1) 若明文是Jia,密钥是Pass,则输出的密文是:
  2. (2) 请在横线处填上合适的代码。

    Const MIN_ASC = 65       ′字母“A”的ASCII值

    Function X2D(x As String) As String     ′字符串小写转成大写

    Dim s As String, zf As String, i As Integer

    s = “”

    For i = 1 To Len(x)

    zf = Mid(x, i, 1)

    If zf >= “a” And zf <= “z” Then

                s = s +

    Else

          s = s + zf
              End If
        Next i
        X2D = s

    End Function

    Private Sub Command1_Click()

    Dim M As String, K As String, C As String, flag As Boolean

    Dim i As Integer, t As Integer, ch As Integer, pos As Integer, j As Integer

    M = Text1.Text             ′明文

    K = Text2.Text              ′密钥

    t = Len(K)

    K = X2D(K)                   ′将密钥全部转成大写

    C = “ ”                      ′加密后的结果

    For i = 1 To Len(M)

    ch = Asc(Mid(M, i, 1))

    flag = False

    If ch >= 97 And ch <= 122 Then ch = ch - 32: flag = True

      pos =                ′密钥的字符位置值

    If pos = 0 Then pos = t

          j = Asc(Mid(K, pos, 1))               ′密钥字符的ASCII值

         ch = ch - MIN_ASC

         j = j - MIN_ASC

          ch =

          ch = ch + MIN_ASC

      If flag Then ch = ch + 32         ′设置字母的大小写形式

         C = C & Chr(ch)

    Next i

    Text3.Text = C

    End Sub

   加法密码又被称为。在加法密码算法中,明文中的所有字母都在字母表上向后或向前按照一个固定数目进行生被替换成密文。
   加密算法操作中的一组数字被称为。比如,恺撒密码的密钥为3,加密和解密使用同一个密钥,被称为体制。
(程序设计题)加密解密问题。小明设计了将明文字符(大、小写字母)转为密文字符的加密算法,加密过程如下:

步骤一:输入明文字符,将该字符转换成ASCII;

步骤二:将ASCII码转换成十六进制字符串;

步骤三:将产生的十六进制字符串进行头尾互换并输出。

若用Python程序实现上述加密过程,请回答下列问题:

  1. (1) 明文字符“A”经加密后得到的十六进制字符串为
  2. (2) hex(x)函数实现将十进制数转换成十六进制字符串,如hex(65)="0×41",为实现步骤一和步骤二,请利用函数完善下列代码。

    s=input("请输,入明文字符(大写字母或小写字母):")

    a=     #将字符转换为ASCII

    b=     #将ASCII码转换成十六进制字符串

  3. (3) (多选题)为实现步骤三,下列选项中不正确的是(    )
    A . B . C . D .
  4. (4) 上机调试实现上述加密过程,思考并完成解密过程。

    提示:int(x,16)函数实现将十六进制字符串x转换成十进制整数ASCII值。

某凯撒密码的解密程序段如下:

def decrypt(code,key):#code:密文key: 密钥

    code_ new = "

    for s in code:

        m=  ①        #按照输入的key值,做移位运算

        if m<97:

               ②   

            code_ new + = chr(m)

        returm code_ new

    code = input(‘请输入密文:’)

    key = intinput(‘请输入密钥:’)

    code_ new = decrypt(code, key)

print(code_ new)

  1. (1) 在划线填入适当的语句或表达式,将程序补充完整。

     ② 

  2. (2) 若输入的code为“verygood”,key为“2”,则输出的值为
对用户输入的字符串进行解密的VB程序段如下:

s= Text. Text

For i =1 To Len(s)

    ch= Mid(s,i,1)

    nk=Asc(ch)-i

If nk <0 Then nk nk+127

    Text2. Text= Text2 Text Chr(nk)

Next i

已知大写字母A的ASCII码值为65,小写字母a的ASCII码值为97,在文本框Text1中输入内容“yhT5”,执行程序段后,文本框Text2显示的内容为(   )。

A . YHt5 B . xgS4 C . zjw9 D . xfQ1
对一段字符(仅包含大小写字母和数字)加密,加密规则为: ①字母和数字都往后循环顺移3位,如“a”变为“d”,“y”变为“b”;“0”变为“3”,“7”变为“0”②加密后字母在前,数字在后③字母按逆序排列,数字按顺序排列,如输入明文“ab7Z8x3”,这密文为“aCed4016”。

小王利用VB程序实现这一加密功能,程序界面和代码如下所示:

Private Sub Com_ jm_ Click()

    Dim x As String, ch As String, cl As String

    Dim sl As String, s2 As String, s As String

    Dim i As Integer, n As Integer, y As Integer

    x= Text1. Text

    n=Len(x)

    For i=1 To n

        ch= Mid(x, i, 1)

        If ch >= "0" And ch <= "9" Then

               ①    

            s2=s2 & y

        Elself ch >="a" And ch<="z" Then

            y=(Asc(ch)-Asc("a")+3)Mod 26

               ②   

            s1=c1+s1

        Else

            y=(Asc(ch)- Asc("A")+3) Mod 26

            c2=Chr(Asc("A")+y)

            s1=c2+s1

        End If

    Next i

       ③  

    Text2 Text=s

End sub

  1. (1) 根据程序代码分析,“加密”按钮的名称是
  2. (2) 根据加密规则,明文“9G78fbY5”,则密文为
  3. (3) 请在画线处填入合适的代码:

     ② ③ 

某种字符加密方法描述如下:

①将明文字符串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. (1) 若有一个待加密字符为“Python!”,根据上述加密规则,加密后的密文是
  2. (2) 已知采用上述加密方法得到的密文是“iTCDS!”,反推出明文是

是指在密码算法中引进的控制参数,对一个算法采用不同的参数值,其解密结果就不同。比如,恺撒密码的密钥为3,加密和解密使用同一个密钥,被称为体制。
作为一种最古老的对称加密体制,在古罗马的时候已经很流行,它是加法密码的典型代表。
用英文字母A~D对数字字符0~9进行编码,规则如下表所示:

数字字符

0

 

……

7

8

9

二进制值

0

0

0

0

0

0

0

1

……

0

1

1

1

1

0

0

0

1

0

0

1

 

十进制值

0

0

0

1

……

1

3

2

0

2

1

对应编码

A

A

A

B

……

B

D

C

A

C

B

                                             

例如,数字字符串“709”的编码为“BDAACB”

用VB程序实现上述编码,功能如下:在文本框Text1中输入编码的一串数字字符,单击“编码”命令按钮Command1,在文本框Text2中显示编码结果。程序运行界面如图所示。

  1. (1) 下列属于VB窗体文件的是          (单选,填字母)。
    A . szbm. vbp B . szbm. frm C . szbm. exe
  2. (2) 实现_上述功能的VB程序如下,请在划线处填入合适的代码。

    Private Sub Command1_ Click( )

        Dim code As String, s As String, ch As String, result As String

        Dim i As Integer, numL As Integer, numR As Integer

        Dim flag As Boolean

        code= "ABCD"

        s= Text1. Text

        flag= True

        result=“”

        For i= 1 To Len(s)

            ch= Mid(s, i, 1)

            If ch<"0" Or ch>"9" Then

                

                Exit For     '退出循环

            Else

                numL= Val(ch) \ 4

                numR=

                result = result +Mid ( code, numL+1, 1)+Mid(code, numR+1, 1)

            End If

        Next i

        If flag Then

            Text2. Text= result

        Else

           Text2. Text="输入错误"

        End If

    End Sub

  3. (3) 运行该程序,若在文本框Text1中输入“A5”,单击“编码”命令按钮Command1,在文本框Text2中显示编码结果为 。
小明编写了一个字符串加密程序,功能如下:在文本框Text1中输人明码,单击“加密”按钮Command1后,在文本框Text2 中显示加密后的密文,运行界面如图所示。加密算法如下:

①将明码中每个字符的八位二进制ASCII码(不足八位的左端补0,凑足八位)分成两段(左4位一段,右4位为另一段),如字符“C”的二进制ASCI值为01000011,分段后为0100,0011 ;

②将高位段(左边4位)左移一位,并将原第一位数码移到第4位(如0100转化为1000),再转化为十六进制数(如1000 化为8);

③对另一段(右4位)执行2)所示算法,如0011→0110→6;

④顺次连接两位十六进制数,得到该字符的暗码,如“C”的暗码为“86”;

⑤将每个字符的暗码按照明码的顺序连接。

实现上述功能的VB程序如下,请回答下列问题:

Private Sub Command1_Click()

    Dim i As Integer, j As Integer, m As Integer, k As Integer

    Dim c As String, x As Integer, y As Integer

    Dim d(1 To 8)As Integer    '数组d存储字符ASCII码二进制从左到右的各位数码

    Dim mw As String    'mw存储暗码

    mw = " "

    For i=1 To Len(Text1. Text)

        c= Mid(Text1. Text, i, 1)

        For j=1 To 8

            d(j)=0

        Next j

        m= Asc(c)

            ①    

        Do While m>0

            d(k)=m Mod 2

            m=m\2

            k=k-1

        Loop

        x=d(1) : y=d(5)

        For j=1 To 3

            d(j)=d(j+1)

                ②   

        Next j

        d(4)= x:d(8)=y

        mw= mw十btoh(d)

    Next i

    Text2. Text= mw

End Sub

'以下函数是将数组元素中的二进制数转换成对应的十六进制数

Function btoh(m() As Integer) As String

'将数组m作为函数的参数

    Dim s As Integer, i As Integer

    Dim str As String, ch As String

    str=" "

    s=0 : ch=" "

    For i=1 To 8

        s=s * 2+m(i)

        If i=4 Then

            ch= Mid(str, s+1, 1)

            s= 0

        End If

    Next i

        ③    

End Function

  1. (1) 按照加密算法,字符“J”的密文是
  2. (2) 请在划线处填入合适代码。

     ② ③ 

某字符串(字节数为3的倍数)编码规则如下:

1)将该字符串内码分成3个字节一组,顺次连接后得到24位二进制数;

2)将得到的24位二进制数字按每6位一组分成4组,每组6个位;

3)在每组数字前补上两个0,得到4个字节的二进制数;

4)将(3)中得到的四个二进制数分别转换为十进制数;

5)将每个十进制数转换为1个加密字符,对应的“密码表”按数值由小到大依次为“ABCDEF GHIJKLMNOPQRSTUV WXYZ-abcdefghijklmnopqrstuvw xyz0123456789+/”

小明按照上述方法,设计了一个字符串(仅包含ASCII字符)加密的VB程序,功能如下:

单击“加密”按钮Command1,程序依次将文本框Text1中每3个字符的ASCII码值作为4个字节转换为四个加密字符,连接这些加密字符,最后在文本框Text2中输出加密结果。

程序运行效果如图所示。

实现上述功能的VB程序如下:

  1. (1) 在上述加密算法步骤(4)中,得到的十进制数最大是
  2. (2) 请在划线处填入合适代码。

    Function Code2Char(c As Integer) As String

        Dim s As String

        s=“ABCDEFGHIJKLMNOPQRSTU-VWXYZabcdefghijklmnopqrstuvwxyz 0123456789+ /”

        Code2Char=

    End Function

    Private Sub Command1_Click()      '加密过程

        Dim n As Integer, s As String, i As Integer, ss As String

        Dim a1 As Integer , a2 As Integer, a3 As Integer

        '存储加密前字符ASCII码

        Dim b1 As Integer, b2 As Integer     '分别存储分割、转换后的前两个十进制数

        Dim b3 As Integer , b4 As Integer     '分别存储分割、转换后的后两个十进制数

        s= Text1. Text

        n= Len(s)

        ss=””

        For i=1 To n ()

            a1= Asc(Mid(s, i, 1))

            a2= Asc(Mid(s, i+1, 1))

            a3= Asc(Mid(s, i+2, 1))

            b1=a1\ 4

            b2=(al Mod 4) * 16+(a2 \ 16)

            b3=

            b4=a3 Mod 64

            ss=ss+Code2Char(b1)+Code2Char(b2) + Code2Char( b3)+Code2Char( b4)

        Next i

        Text2. Text= ss

    End Sub

某日期加密授权码生成方法描述如下:

1)授权码由10位字符组成,前8位为日期的密文,后2位为验证码;

2)取日期的第1位字符,若该字符第一次出现,则直接取其对应加密字符,否则取下一个不重复的加密字符。按此操作,依次取出该日期余下各位对应的加密字符;

3)求出所有日期字符数值的和,将和除16取余加1得到一位验证码字符;若和不小于16,则将和除16取整加1得到另一位验证码字符,否则另一位验证码字符为“X”。取出验证码重复时,处理规则与(2)相同。

加密(验证码)字符对应表如下。

值(十进制)

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

加密(验证码)字符

K

n

G

j

L

t

W

b

O

a

P

H

Z

q

Y

c

小明设计了一个生成8位日期(YYY YMM-DD格式)授权码的VB程序。程序功能如下:在文本框Text1中输入一个8位有效日期,单击“生成授权码”按钮Command1,在标签Label2中显示出该日期的授权码。运行效果如图所示。

实现上述功能的VB程序段如下:

  1. (1) 请在划线处填入合适代码:

    Dim f(0 To 15) As Integer

    Const Code=“KnGjLtWbOaPHZqYc”

    Private Sub Command1_ Click()

        Dim rq As String, sq As String

        Dim c As Integer, i As Integer, d As Integer

        For i=0 To 15

            f(i)=0

        Next i

        rq= Text1. text

        sq =””:d=0

        If Len(rq) <> 8 Then

            Label2. Caption=“请输入8位日期!”

        Else

            For i=1 To 8

                c= Val(Mid(rq,i, 1))

                d=d+c

                sq =+sq

            Next i

            If d >=16 Then

                yz= GetChar(d Mod 16+1) +GetChar(d \ 16+1)

            Else

                yz= GetChar(d Mod 16+1)+“X”

            End If

        Label2. Caption=sq+yz

        End If

    End Sub

    '获取不重复的加密字符

    Function GetChar(x As Integer) As String

        Dim flag As Boolean

        flag= False

        Do While flag= False

            f(x)=f(x)+1

            If f(x)=1 Then

                

                f(x)=f(x)+ 1

                flag= True

            Else

                x=(x+1) Mod 10

            End If

        Loop

    End Function

  2. (2) 若输入的日期是“20170818”,则该授权码的验证码字符是
大写英文字母加密:

步骤一、输入大写字母A-F的字符串,通过随机生成的keys列表进行匹配,找到相应的key,进行第1轮加密,得到相应的数字列表a。

步骤二、根据上述结果对加密后列表中的元素按偏移量K(K为正整数)发生偏移,每个元素从右往左向前移动K位,将偏移后结果存储在列表b中。

例如:

整体运行结果如下图所示:

  1. (1) 现有加密列表keys[4,5,7,1,3,9],需加密字母为“ABED”,则一轮加密后得到的数字列表a为:[],若偏移量为3,则二次加密后的列表b结果为:[]。
  2. (2) 请在划线处填入合适的代码。

    import random

    #随机生成 keys 列表

    n=6

    i=0

    keys=[ ]

    while i<n:

      key=random.randint(1,9)

      if key not in keys:

        keys.append(key)

       

    print("随机生成加密列表 keys:",keys)

    #第1重加密:将输入的字母经过keys列表加密转换为a列表

    a=[ ]

    s=input("输入您要加密的字母(A-F):")

    for i in s:

      a.append(keys[])

    print("经过第1轮keys列表加密后:",a)

    #第2重加密:偏移加密

    k=int(input("请输入偏移量K:"))

    b=[0]*len(a)

    for i in range(len(a)):

      b[i]=a[]

    print("经过第2轮加密后:",b)

有一种ASCII字符加密的算法,其加密过程如下:

①将明码中每个字符的ASCII码转为八位二进制,依次连接

②位置加密:每4位一组进行移位,第1组左移一位,并将原第一位数码移至最后(如0110转化为1100),第2组右移一位,并将原最后一位数码移至头部(如0001转化为1000),第3组左移...以此类推,实现位置加密,并将每组移动后的结果转换成十进制,按顺序连接

③值加密:随机产生一个密钥key,在符号列表['+','*','//','%']中取出对应运算符号,将②中的十进制结果分别与密钥key进行运算,顺次连接求得该字符的密文,(如key为3,取得运算符'%',则字符'a'的高位密文为12%3=0,低位密文为8%3=2,顺次连接后得'a'的密文为'02'

④将每个字符的密文顺序连接,得到最终字符串密文。

用Python编写的程序运行结果如图所示,请回答下列问题:

  1. (1) 当 key=3时,输入要加密的明文:“aA”,则输出的密文为:        
  2. (2) 请在划线处,填入适当的语句或语句表达式

    import random

    def jzzh(x):

        s=''

        for i in range(8):

            r=x%2

            s= 

            x=x//2

        return s  

    def jisuan(x):      #进行key运算

        m=0

        if fh[key]=='+':

            m=x+key

        elif fh[key]=='*':

            m=x*key

        elif fh[key]=='//':

            m=x//key

        elif fh[key]=='%':

            m=x%key

        return m

    def yidong(x):      

        jg=''

        n=len(x)//4

        for i in range(n):

            if i%2==0:         

                f= 

            else:               

                f=x[i*4+3]+x[i*4:i*4+3]

            s=0

            for j in f:      #将4位二进制转成十进制

                s=s*2+int(j)

            jg+=    

        return jg      

    mingw=input('请输入要加密的明文:')

    fh=['+','*','//','%']

    miw='' global key

    key=random.randint(0,3) for a in mingw:

        a=ord(a)

        L=jzzh(a)

        miw+=L jieguo=yidong(miw)

    print("产生的随机密钥为:",key,"\n 密文为:",jieguo)

小明同学设计了一种加密算法。将字符串中的小写字母转成大写,对每个字母逐个进行凯撒密码加密,最后倒序输出。部分代码如下,请补全代码。

def jiami(x,key):

    if 'a'<=x<='z':

      

    x=chr((ord(x))%26+65)

    return x

mingwen=input('请输入明文:')

key=input('请输入密钥:')

miwen=''

for i in range(n):

    a=mingwen[i]

 

print(miwen)

最近更新