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

星猫接收到一组外星人空间坐标,经过初期破译,获悉它是二进制代码,其中“/”代表0,“\”代表1,“|”代表分隔符。编写破译程序,在文本框Text1输入外星人坐标,单击“解密”按钮,在文本框Text2输出地球人坐标。运行界面如下图所示。

  1. (1) 代码中“Private Sub Cmd_Click()”中的“Cmd_Click”是(填字母,A .对象名,B .事件名,C .事件处理过程名)
  2. (2) 阅读下列代码,下划线处填上合适代码。

    Private Sub Cmd_Click()

      Dim dec As Integer, n As Integer, i As Integer, w As Integer

      Dim s As String, c As String, sd As String

      s = Text1.Text

      n =

      sd=""

      For i = 1 To n

            c =

            If c <> "|" Then

                If c = "/" Then

                    w = 0

                Else

                    w = 1

                End If

                dec =

            Else

                sd = sd + Str(dec) + ","

         dec = 0

            End If

        Next i

        Text2.Text = sd

    End Sub

  3. (3) 如上所示,如果输入的外星人坐标,漏了最后一个“|”,那么输出的地球人坐标是
某解密程序:对输入的字符串进行解密处理,输出解密后的字符串。已知数据加密方法为对原始字符串中的每个字符进行如下处理:

①将该字符的ASCII码转换为8位二进制数;

②将后4位二进制数逐位取反(1变0,0变1)

③将操作②生成的4位二进制数均右移一-位, 原第4位变成新的第1位;

④将原来的前4位二进制数连接新的后4位二进制数成为最终加密后字符的内码。

例如字符“A”经过上述加密运算,可得到字符“M”。

ASCII码

转二进制数

后4位取反

后4位右移

拼合

转十进制

转字符

65D

0100 0001B

1110

0111

0100 0111B

71D

G

程序运行界面如图所示,在文本框Text1中输入加密字符串。点击“解密”按钮后,在文本框Text2中输出原始字符串。

  1. (1) 若加密后的字符为F,则原字符为
  2. (2) 请在横线处填入合适代码。

    Private Sub Command1_ Click()

      Dim s As String, s1 As String, s2 As String, n As Integer

      Dim x As Integer, i As Integer, j As Integer, C As Integer

      Dim a(15) As String

      a(0) = "000": a(1) = "0001": a(2) = "0010": a(3) =“011": a(4) = "0100":a(5) = "0101": a(6) ="0110": a(7) = "111": a(8) = "1000" a(9) ="1001":a(10) = "1010": a(11) ="1011": a(12) = "1100"a(13) = "1101": a(14)= "1110":a(15) ="1111"

      s2 = "": s = Text1. Text

      For i=1 To Len(s)

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

        c=n Mod 16

        s1 = 

        x = Va1(Mid(s1, 1,1))

        For j=2 To  4

          x=x+

        Next j

        x=(n/16)*16

        s2 = s2 + Chr(x)

      Next i

      Text2. Text = s2

    End Sub

  3. (3) 加框处代码出错,请改正。
某二进制字符串的压缩算法描述如下:

①取字符串的首字符为压缩后的第一个字符。

②统计该字符连续的个数,两者间使用逗号分隔。

③按此方法进行后续字符的压缩,各段压缩结果用“/”分隔。

④重复上述过程,直到将所有字符压缩完成。

例如:字符串"1100000000000011110"压缩后的字符串为"1,2/0,12/1,4/0,1/"。依据上述描述编写VB程序,实现此算法的解压缩功能:在文本框Text1中输入待解压缩的字符串,单击“解压缩”按钮,在文本框2中输出解压缩的字符串。运行效果如下图所示。

  1. (1) 若在文本框1中输入“1,2/0,3/1,2/”,单击“解压缩”按钮后,文本框2中输出的内容为
  2. (2) 实现解压缩功能的程序代码如下,请在划线处填入合适的代码。

    Private Sub Command1_Click()

      Dim i As Integer, x1 As Integer, x2 As Integer, s As String

      Dim ch As String, result As String

      s= Text1.Text

      i= 1: result =”

      Do While i<= Len(s)

           ①  

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

          If ch= "/" Then

            x2 = tmp

            For j=1 To x2

              result = result & CSstr(x1)    ‘Cstr函数的功能是将数字转为字符串

            Next j

          Else

               ②   

          End If

          tmp= 0

        Else

             ③  

        End If

        i=i+ 1

      Loop

      Text2.Text = result

    End Sub

     ② ③ 

某数据解密算法描述如下:

⑴在输入的数字字符串中依次提取有效的密文,有效的密文的特点:

①是一组连续的,都小于5的三位数字串;②每个位置上的数字不能被重复提取;

⑵对有效密文进行解密的过程:

将密文作为一个五进制数转换为对应的十进制数值,根据ASCII字符的十进制编码表,得出对应的明文字符(提示:空格符所对应的ASCII码值为十进制数32,小写字母”z”所对应的ASCII码值为十进制数122)。

例如,密文242转换成十进制数为72,对应的明文字符为大写字母“H”。

程序运行界面如下图所示,在文本框Text1中输入密文,单击“解密”按钮,在文本框Text2中输出解密后的明文密码。

  1. (1) 若输入的密文为“841497230235”,则对应的明文是
  2. (2) 实现上述功能的VB代码如下,加框处的语句有错,应改为
  3. (3) 请在划线处填入合适的代码。

    '以下代码是将有效密文数字转换为十进制数的函数

    Function conv(p As String) As Integer

      Dim k As Integer, q As String, i As Integer

      k = 0: g = ""

      For i = 1 To 3

        q = Mid(p, i, 1)

        

      Next i

      conv = k

    End Function

    Private Sub Command1_Click()

      Dim st As String, p As String, res As String

      Dim c1 As String, c2 As String, c3 As String

      Dim i As Integer, d As Integer, n As Integer

      st = Text1.Text: n = Len(st)

      i = 1: res = ""

      Do While i <= n – 2        '提取有效密文,并进行转换

        c1 = Mid(st, i, 1): c2 = Mid(st, i + 1, 1): c3 = Mid(st, i + 2, 1)

        If  Then

         

          d=conv(p)

        If d >= 32 And d <= 122 Then res = res + Chr(d)

         

        Else

          i = i + 1

        End If

      Loop

      Text2.Text = res

    End Sub

  小明编写了一个字符串加密程序,功能如下:在文本框Text1中输入明文,单击“加密”按钮Command1后,在文本框Text2中显示加密后的密文,运行界面如图所示。加密算法如下:

1)将明文中每个字符用8位二进制ASCII码(不足八位的左端补0,凑足八位)表示;如“A”的二进制ASCII码值为01000001;

2)对8位二进制编码进行取反码(0变1,1变0)操作,如01000001的反码是10111110;

3)将8位二进制反码用2位十六进制表示,得到该字符的密文;

4)将每个字符的密文按照明文的倒序连接。

实现上述功能的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

             ‘I处

  Next j

  m = Asc(c)

  k = 8

  Do While   ‘II处

 d(k)=     ①      

     m = m \ 2

     k = k - 1

  Loop

  mw = btoh(d) + mw

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 = "0123456789ABCDEF"

s = 0: ch = ""

For i = 1 To 8

  s = s * 2 + m(i)

  If      ②       Then

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

     s = 0

  End If

Next i

End Function

阅读分析程序代码,请回答下列问题:

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

     ② 

  3. (3) 若I处方框内代码改成d(j)=0,则II处的方框内代码应改为:
对用户输入的字符串进行解密的 VB 程序段如下:

s = Text1.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
编写VB程序,实现如下功能:单击“生成密文”按钮Command2,在文本框Text3中产生与每个小写字母对应的密文(每个明文字母对应1个不重复的密文字母)。在文本框Text1中输入单词字符串,单击“加密”按钮Command1后,进行逐个字符加密,加密方法:在“明文”中找到相应字符,再得到明文对应位置的密文,并在文本框Text2中显示对应密文(运行效果如图所示)。实现上述功能的VB代码如下,请完善程序代码。

Dim m2 As String

Private Sub Command1_Click()

Dim flag(1 To 26) As Boolean

Dim num As Integer,t As Integer

Randomize

num = 1

Text3.Text = “”

For i = 1 To 26

 flag(i) = False

Next i

Do While num <= 26

 x = Int(Rnd * 26) + 97

 

 If flag(t) = False Then

m2 = m2 + Chr(x)

num = num + 1

 End If

Loop

Text3.Text = m2

End Sub

Private Sub Command2_Click()

Dim s As String, m As String, result As String

Dim k As String, c As Integer

s = Text1.Text

m = “abcdefghijklmnopqrstuvwxyz”

For i = 1 To Len(s)

 k = Mid(s, i, 1)

 If k >= ”A” And k <= “Z”  Then

k = Chr(Asc(k) + 32)

 End If

 c = 1: continue = True

 Do While

If k = Mid(m, c, 1) Then

 continue = False

End If

c = c + 1

 Loop

 

Next i

Text2.Text = result

End Sub

某字符(限ASCII字符)加密算法,对明文中的每个字符进行下列加密处理:

1)将该字符的ASCII码转换成对应的2位十六进制数;

2)将产生的十六进制数互换位置;

3)步骤2)产生的二位十六进制数即为该明文字符加密后的密文字符。

小明按照上述方法,设计了一个字符串加密的VB程序,功能如下:单击“生成密文”按钮Command1,程序依次将文本框Text1中每个字符按上述规则进行加密处理,连接这些加密字符,最后在文本框Text2中输出加密结果。程序运行界面如图所示。

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

  1. (1) 按照上述加密算法,明文“B”生成的密文是
  2. (2) 实现上述功能的VB程序如下,请在横线处填入合适代码。

    Private Sub Command2_Click()

    Dim s As String, a As String, ans As String

    Dim c As Integer, i As Integer

    Dim s1 As String

    s=Text1.Text

    ans=” ”

    For i=1 To Len(s)

    a=Mid(s, i, 1)

    s1=

    ans=

    Next i

    Text2.Text=ans

    End Sub

    Function DToh(x As Integer) As String

    Dim str As String

    str=”0123456789ABCDEF”

    Do While x <> 0

    t=x Mod 16

          x=x \16

    Loop

    End Function

某数据加密方法描述如下:

1)以字节为单位进行加密处理;

2)将1个字节的8位二进制数分割成前4位与后4位两个二进制数;

3)分别将上述两个4位二进制数转换成十进制数;

4)将每个十进制数转换为1个加密字符,对应的“密码表”如下:

值(十进制)

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

加密字符

I

l

i

k

e

C

H

N

p

o

s

t

c

a

r

d

小华按照上述方法,设计了一个字符串(仅包含ASCII字符)解密的VB程序,功能如下:在文本框Text1中输入一串密文,单击“解密”按钮Command1,在文本框Text2中显示解密结果。

下表显示了字符串中一个字符的加密过程:

m

←转换前字符m

109

←字符m的ASCII码十进制值

0

1

1

0

1

1

0

1

←对应的二进制数

6

13

←分割、转换后的十进制数

H

a

←对应的加密字符

程序运行效果如图所示。

  1. (1) 若上述程序运行时在文本框Text1中输入“HrHd”,在文本框Text2中显示
  2. (2) 请在划线处填入合适的代码。

    Private Sub Command1_Click()

        Dim a(1 To 100) As Integer

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

        Dim x As Integer, k As Integer, i As Integer, j As Integer

        Const code = "IlikeCHNpostcard"

        n = Len(code)

        s1 = Text1.Text

        x = 0: k = 0

        For i = 1 To Len(s1)

            c = Mid(s1, i, 1)

            For j = 1 To n

                If  Then

                    pos = j - 1

                    x = x * 16 + pos

                    Exit For   '退出当前For循环

                End If

            Next j

            If i Mod 2 = 0 Then

                

                a(k) = x

                x = 0

            End If

        Next i

        For i = 1 To k

            

        Next i

        Text2.Text = s2

    End Sub

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

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

图片_x0020_100007

  1. (1) 命令按钮Command1上显示的“解密”文字,是通过修改该按钮的(单选,填字母:A .Font/ B .Caption/ C .BackColor)属性实现的。
  2. (2) 实现上述功能的VB程序如下,请在划线处填入合适的代码。

    Private Sub Command1Click( )

        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

            IfThen 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

字符加密:用 VB 编写某字符串加密解密程序(仅针对 ASCII 码字符)。其加密过程如下:

1)对待加密的字符进行判断,如果是英文字符的,则将该字符后移2位(如:字符“A”转换成“C”,字符“Z”转换成“B”,字符“a”转换成“c”,字符“z”转换成“b”),其他字符保持不变;

2)求出每个字符的ASCII码,然后用7位二进制来表示,比如“4”的ASCII码为十进制52,转换为7位二进制为“0110100”;

3)从左至右依次记为第1,2,3……7位,分别把第3,4,5位取反。即0变1,1变0,至此“0110100”变为“0101000”,将此二进制转换为ASCII码为40,对应的字符为左括号“(”,即“4”经过加密后得到加密字符为左括号“(”。

在文本框Text1中输入ASCII字符,单击“加密”按钮Command1,则在文本框Text2中显示经过加密的字符。程序界面如图所示,请完成下列问题。

  1. (1) 若在文本框Text1中输入字符“4My5”,则在文本框Text2中显示的加密字符为
  2. (2) 实现上述功能的 VB 程序如下, 请在划线处填入合适的代码。

    Private Sub Command1_Click()

        Dim s As String, ch As String s = Text1.Text

        For i = 1 To Len(s)

            ch = Mid(s, i, 1)

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

               

                ElseIf ch >= "a" And ch <= "z" Then     '让小写字母后移2位,代码略

            End If

            Text2.Text = Text2.Text +

        Next i

    End Sub

    Function jm(x As String) As String

        Dim a(1 To 7) As Integer, j As Integer, n As Integer, asc1 As Integer

        asc1 = Asc(x)

        n = 0

        For j = 7 To 1 Step -1

            If j = 3 Or j = 4 Or j = 5 Then a(j) = 1 - asc1 Mod 2

            Else

                a(j) = asc1 Mod 2

            End If

            n =

            asc1 = asc1 \ 2

        Next j

        jm = Chr(n)

    End Function

有如下VB程序段:

s= Text1.Text

s1=" "

For i=1 To Len(s)

    c= Mid(s, i, 1)

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

        t=(Asc©-asc("A")+25)Mod 26

        c=Chr(t+ Asc("A"))

    End If

    s1=s1+c

Next i

Text2.Text=s1

s1=s1+c

在文本框Text1中输入“ABcd2XY”,执行上述程序段后,文本框Text2中输出(    )

A . ZAWX B . ZAcd12WX C . XWAZ D . XW21dcAZ
某加密算法的加密部分Python程序段如下:

def encrypt(msg,key):

result = ""

size = len(msg)

for i in range(0,size):

    result = result + msg[(i - key) % size]

return result

msg = input("请输入明文:")

key = int(input("请输入密钥:"))

re =              

print(re)

  1. (1) 请在划线处补充代码。
  2. (2) 如果输入的msg为“cdef”,key为3,那么输出的结果为
  3. (3) 这种加密机制称为(选填字母:A .置换密码;B .换位密码;C .简单异或密码)。
信息的加密一直是一种保障信息安全的手段,其中最简单的一种加密方法就是采用密钥加密。 如下是对小写字母利用密钥加密的基本算法:

①输入密钥a(0<a<26的正整数)

②设置i的初值为0,s1的初值为空串

③获取待加密字符串s的第i个字母c

④按字母表顺序用字母c后面第a个字母代替字母c;如果字母c后面第a个字母超出了“z”,则返回“a”后再按次序后移(说明:字母“z”后移2位应该变为“b”)

⑤将加密完成的字母c连接到s1中

⑥i增加1

⑦如果i的值小于等于待加密字符串s的长度-1,则返回第③步,否则输出密文字符串s1

  1. (1) 如果密钥为3,那么采用该算法对字符串‘axz’加密后的密文应该是;同样,采用该算法获得密文为‘happy’,密钥为5,则加密前的原文是
  2. (2) 如果要将此算法改为对应的解密算法,仅需改动第步(仅1个步骤,不考虑原算法其它步骤中“加密”字样的修改),改为:
某字符(限ASCII字符)加密算法,对明文中的每个字符进行下列加密处理:

1)将该字符的ASCII码转换成对应的2位十六进制数;

2)将产生的十六进制数互换位置;

3)步骤(2)产生的二位十六进制数即为该明文字符加密后的密文字符。

小明按照上述方法,设计了一个字符串加密的VB程序,功能如下:单击“生成密文”按钮Command1,程序依次将文本框Text1中每个字符按上述规则进行加密处理,连接这些加密字符,最后在文本框Text2中输出加密结果。程序运行界面如图所示

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

Private Sub Command1_ Click()

    Dim s As String, a As String, ans As String

    Dim c As Integer, i As Integer

Dim c1 As Integer, c2 As Integer

    Dim d1 As String, d2 As String

    s= Text1. Text

    ans =“”

    For i=1 To Len(s)

        a=Mid(s, i, 1)

        c= Asc(a)

c1=c \16

        c2=   ①   

d1= Mid(Str(c1), 2, 1)       '使用Str(c1)将在字符c1前增加一个空字符

        If c2>>=10 Then    ②   Else d2 = Mid(Str(c2), 2, 1)

        ans=   ③  

    Next i

    Text2. Text= ans

End Sub

  1. (1) 按照上述加密算法,明文“B”生成的密文是
  2. (2) 请在划线处填入合适代码。

     ② ③ 

某信息仅包含大写字母,字符数不超过n*n(n*n 为密钥矩阵规模,n<0),加密过程如下:

图 a

图 b

根据上述加密算法编写解密程序。程序在启动时读取密钥矩阵存入列表a中,根据程序提示,输入 密文,然后显示明文。运行界面如下图 c所示。

图 c

  1. (1) 输入的密文是“8,1,23,2,17,3,33,4,”,则原文是(密钥矩阵按图 a 中的 密钥矩阵)
  2. (2) 实现上述算法的 Python 程序如下,请在划线处填入合适的代码。

    def getmm(x,n):

    col = (x-1) % n

    row = (x-1) //n

    getmm = a[col*n+row]

    if row % 2 == 1:

        getmm =

    return getmm n = 3

    #存储密文数据,偶数位存储加密值,奇数位存储该数据在原文中的位置

    #生成规模为 n*n 的密钥矩阵存入列表 a 中

    mw=[]

    a=[]

    for i in range(n*n):

        a.append(i+1)

        p=input("请输入密文:")      #2,1,6,2,10,3,12,4,10,5, t=0

        k=0

    for i in range(len(p)):

    c=p[i]

    if c!=",":

    t=t*10+int(c)

    else:

    mw.append(t)

    t=0 print("原文为:",end="")

    yw=[]

    for i in range(k//2):             #对密文解密,结果存入列表 yw 中

    yw.append(mw[2*i]-getmm(mw[2*i+1],n))

    s=""

    for i in range(k//2):

    s=s+                  #转换为字母输出

    print(s)

某网站对信息进行加密解密,选择页面“index.html”如图1,加密页面“jia.html”如图2,解密页面“jie.html”如图3。在选择页面点击相应按钮,选择加密或解密。

图1

图2

图3

选择加密时,在明文文本框中输入明文,点击“加密”按钮,网页显示密文与对应的密钥。加密规则为打乱明文对应的索引作为密钥,再利用该索引逐个取明文字符连接成密文,例如:明文为“信息技术”,若被打乱的索引为[2,0,1,3],则密文为“技信息术”,密钥为“2,0,1,3”

选择解密时,在密文文本框中输入密文,密钥文本框输入密钥,点击“解密”按钮,网页显示明文。

  1. (1) 该网络应用属于架构。(单选,填字母:A . B/S架构,B . C/S架构)
  2. (2) 若待解密文本为“自息爱信也我己爱”,密钥为“2, 7, 1, 6, 4, 0, 3, 5”,则解密结果是
  3. (3) 实现该功能的python程序如下,请在划线处填入合适的代码:

    from flask import render_template,request,Flask

    import random

    app=Flask(__name__)  #创建应用实例

    @app.route('/')  #选择页面路由

    def index():

        return render_template('')

    #加密功能代码略,以下为解密代码:

    @app.route('/jiemi1/',methods=["GET","POST"])

    def jiemi1():

    wb=request.form["wb"] #利用request获取网页文本框内容,返回示例:“1,4,2,3,0”

    keyo=request.form["key"]  #变量wb存储密文,变量keyo存储密钥

        keyn=list(map(int,keyo.split(","))) #将字符串keyo转换为数值列表,示例:[1,4,2,3,0]

        result=""

    for i in range(len(keyn)):

    for j in range(len(keyn)):

    if :

                        break

            result+=wb[j]

        return render_template("jie.html",WB=wb,KEY=keyo,RESULT=result)

    if __name__=="__main__":

       

  4. (4) 根据上述描述与图1,则“天气”节点中的“多云”信息熵是
  5. (5) 实现求首次划分节点的程序如下,请在划线处填入合适的代码:

    def cal(lst): #计算样本lst的信息熵

    x,y,z=0,len(lst),0  #x表示该样本信息熵,y表示该样本数量,z表示某信息发生的概率

        num={}

    for i in lst:

    if i not in num:

              

            num[i]+=1

    for k in num:

            z=num[k]/y   #计算该信息发生的概率

    x-=z*log(z,2) #根据公式计算信息熵,log(b,a)等价于logab

        return x

    def check(x,y):

    #根据节点x,对样本y进行划分,返回示例:{'否': [1, 1, 0, 0, 1, 1, 1, 1], '是': [1, 1, 0, 1, 0, 0]}

    dic={'是否有风': ['否', '否', '否', '否', '否', '否', '否', '否', '是', '是', '是', '是', '是', '是'],

    '天气': ['多云', '多云', '晴', '晴', '晴', '雨', '雨', '雨', '多云', '多云', '晴', '晴', '雨', '雨'],

    '温度': [28, 27, 29, 22, 21, 21, 20, 24, 18, 22, 26, 24, 18, 21],

    '湿度': [78, 75, 85, 90, 68, 96, 80, 80, 65, 90, 88, 63, 70, 80],

    '是否前往': [1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0]}

    xm=list(dic.keys())

    entropy=cal(dic[xm[-1]])  #调用函数计算样本原始信息熵entropy

    #计算各节点信息增益

    m=0;p=""

    col=xm[:-1] #“是否前往”是结果项,不参与计算

    for i in col:

    size=len(dic[i]);entropy_1=0

        zyb=  #调用函数对样本按照当前节点进行划分

    for j in zyb: #根据划分情况逐个求子样本信息熵并按比例累加

    entropy_1+=len(zyb[j])/size*cal(zyb[j])

        zy=entropy-entropy_1

    print(i,"的信息增益:",zy)

    if zy>m: #计算最大信息增益与信息增益最大的节点

            m=zy

           

    print("信息增益最大的节点:",p)

决策树是一种通过树形结构进行分类的人工智能预测模型,如根据图1所示“气象特点与游客是否来游乐场的关系”绘制的图2所示的决策树树形结构:

图1

图2

通过了解当天的是否有风、天气、温度和湿度这4个节点参数即可预测当天是否有人来游乐场。

不同的节点划分顺序可以绘制不同的决策树,为了选出最优的节点划分顺序,需要采用“信息熵”与“信息增益”指标。

信息熵,又称香农熵,被用来度量信息量的大小,信息熵越大表示信息量越大;

信息增益,表示样本经某节点划分后的信息熵变化大小。我们绘制决策树时应当逐次选择信息增益最大的节点作为当前节点。

对于有n个信息的样本D,记第k个信息发生的概率为,信息熵计算公式为E(D)=,

例如游乐场14个样本中“去”(9个)、“不去”(5个),则信息熵==0.940

若样本按“是否有风”节点划分,“是”(6个,其中3个去,3个不去)信息熵==1;

“否”(8个,其中6个去,2个不去)信息熵==0.811;经过此节点划分后的信息增益=原始信息熵按此节点划分后样本信息熵比例和=0.940(0.811)=0.048。

  1. (1) 该网络应用属于架构。(单选,填字母:A . B/S架构,B . C/S架构)
  2. (2) 若待解密文本为“自息爱信也我己爱”,密钥为“2, 7, 1, 6, 4, 0, 3, 5”,则解密结果是
  3. (3) 实现该功能的python程序如下,请在划线处填入合适的代码:

    from flask import render_template,request,Flask

    import random

    app=Flask(__name__)  #创建应用实例

    @app.route('/')  #选择页面路由

    def index():

        return render_template('')

    #加密功能代码略,以下为解密代码:

    @app.route('/jiemi1/',methods=["GET","POST"])

    def jiemi1():

        wb=request.form["wb"]  #利用request获取网页文本框内容,返回示例:“1,4,2,3,0”

    keyo=request.form["key"]  #变量wb存储密文,变量keyo存储密钥

        keyn=list(map(int,keyo.split(","))) #将字符串keyo转换为数值列表,示例:[1,4,2,3,0]

        result=""

        for i in range(len(keyn)):

            for j in range(len(keyn)):

                if :

                        break

            result+=wb[j]

        return render_template("jie.html",WB=wb,KEY=keyo,RESULT=result)

    if __name__=="__main__":

       

  4. (4) 根据上述描述与第16题图1,则“天气”节点中的“多云”信息熵是
  5. (5) 实现求首次划分节点的程序如下,请在划线处填入合适的代码:

    def cal(lst):   #计算样本lst的信息熵

    x,y,z=0,len(lst),0  #x表示该样本信息熵,y表示该样本数量,z表示某信息发生的概率

        num={}

        for i in lst:

            if i not in num:

              

            num[i]+=1

        for k in num:

            z=num[k]/y   #计算该信息发生的概率

            x-=z*log(z,2)  #根据公式计算信息熵,log(b,a)等价于logab

        return x

    def check(x,y):

    #根据节点x,对样本y进行划分,返回示例:{'否': [1, 1, 0, 0, 1, 1, 1, 1], '是': [1, 1, 0, 1, 0, 0]}

    dic={'是否有风': ['否', '否', '否', '否', '否', '否', '否', '否', '是', '是', '是', '是', '是', '是'],

    '天气': ['多云', '多云', '晴', '晴', '晴', '雨', '雨', '雨', '多云', '多云', '晴', '晴', '雨', '雨'],

    '温度': [28, 27, 29, 22, 21, 21, 20, 24, 18, 22, 26, 24, 18, 21],

    '湿度': [78, 75, 85, 90, 68, 96, 80, 80, 65, 90, 88, 63, 70, 80],

    '是否前往': [1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0]}

    xm=list(dic.keys())

    entropy=cal(dic[xm[-1]])  #调用函数计算样本原始信息熵entropy

    #计算各节点信息增益

    m=0;p=""

    col=xm[:-1]       #“是否前往”是结果项,不参与计算

    for i in col:

        size=len(dic[i]);entropy_1=0

        zyb=  #调用函数对样本按照当前节点进行划分

        for j in zyb:  #根据划分情况逐个求子样本信息熵并按比例累加

            entropy_1+=len(zyb[j])/size*cal(zyb[j])

        zy=entropy-entropy_1

        print(i,"的信息增益:",zy)

        if zy>m:   #计算最大信息增益与信息增益最大的节点

            m=zy

           

    print("信息增益最大的节点:",p)

某字符(限ASCII字符)加密算法,对明文中的每个字符加密处理,步骤如下:

1)将该字符的ASCII码转换成 8 位二进制数(不足8位的,高位补上相应数量的0);

2)将上述 8 位二进制循环左移 3 次(移出的数位放在最右边);

3)将上述处理后的 8 位二进制数依次取反(1 变 0,0 变 1);

4)最后将这 8 位二进制分成左右两个 4 位二进制数,分别转换成十进制数,然后从密钥字符串中取出相应的字符作为密码。密钥见下表:

值(十进制)

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

加密字符

W

g

Q

#

f

0

2

y

*

?

S

c

A

p

x

T

例如,明文小写字母“a”,通过上述加密算法加密后的密文是“Tf”,加密过程如下:

“a的ASCII码为97,转换成二进制是01100001”→“逐位取反后为10011110”→“循环左移3次为11110100”→“转换为两个十进制数分别为15,4”→“得到密文Tf”。

程序运行界面如下图所示:

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

  1. (1) 如果输入明文为小写字母“c”,则加密后的密文是
  2. (2) 为实现上述功能,程序如下:

    def miyao(b):     #从密钥中得到相应的密码

      s=0

      my={0:"W",1:"g",2:"Q",3:"#",4:"f",5:"0",6:"2",7:"y",8:"*",9:"?",10:"S",11:"c",12:"A",13:"p",14:"x",15:"T"}

      for i in range(8):

       

        if i==3:

          zh=my[s]

          s=0

      zh=

      return zh

    st=input("输入明文:")

    ans=""

    for i in range(len(st)):

      a=[]

      k=ord(st[i])

      for j in range(8):

        a.append(1)

      while :

        r=1-k%2

        k=k//2

        a[j]=r

        j=j-1

        a=a[3:8]+a[0:3]

        ans=ans+miyao(a)

    print(ans)

    划线处,请填入合适的选项。(单选,填字母)。

    A.s=s*2+b[i]         B.s=s+b[i]*2          C.zh=zh+my[s]      

    D.zh=my[s]+zh        E.k<0                F.k>0

某加密算法程序段如下所示:

def jiami(x):

if "A"<=x<="Z":

  y=chr(ord(x)+32)

elif "0"<=x<="9":

  y=str((int(x)+1)%10)

else:

  y=x

return y

mingwen=input("请输入明文")

miwen=""

for x in mingwen:

  miwen=miwen+jiami(x)

  print("密文为:",miwen)

输入“Abc@789”并运行程序,输出结果是(    )

A . abc8910 B . abc@890 C . ABC678 D . aBC@789