版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、2020版3年高考2年模擬電子資源第4節(jié)加密問題模擬演練1 .在密鑰加密方式中,可以通過自己指定的一個(gè)密鑰將字符串加密 ,而解密也必 須通過密鑰。本題采用的具體實(shí)現(xiàn)方法是將字符串的每個(gè)字符轉(zhuǎn)換為ASCII碼,順序加上密鑰中的對應(yīng)數(shù)字后轉(zhuǎn)換回 ASCII字符得到密文(當(dāng)密鑰位數(shù)不夠時(shí)重 新從第一位循環(huán))。以原文:Hello,密鑰:123為例,"H'轉(zhuǎn)換為ASCII碼后加上密鑰的第一個(gè)數(shù) 字1,再轉(zhuǎn)換回ASCII字符,得到“I” ; "e”轉(zhuǎn)換為ASCII碼,加上密鑰的第二個(gè) 數(shù)字2,轉(zhuǎn)換回ASCII得到“g” ; “1”則加上密鑰的第三個(gè)數(shù)字3得到“o” ;隨后原文又
2、出現(xiàn)“ 1”,但是密鑰中的數(shù)字已經(jīng)用完了 ,則密鑰從頭開始,加上“1” 得到; "o”則得到“q”,最后產(chǎn)生密文“ Igomq”。 具體程序如下,但是有兩處加框的代碼錯(cuò)誤,請改正: Dim code As String, key As StringDim i As Integer, res_code As StringDim l_code As Integer, l_key as IntegerPrivate Sub Command1_Click()'加密程序code = Text1.Textkey = Text2.Textl_code =Len(code)l_key =Le
3、n(key)_ _ « ”res_code =For i = 1 Tol_key ' (1)c =Asc(Mid(code, i, 1)k =Val(Mid(key,i Mod l key,1).(2)res_code = res_code +Chr(k + c)Next iText3.Text = res_code End SubPrivate Sub Command2_Click() '解密程序略End Sub答案 (1) l_code (2)Val(Mid(key,(i-1) Mod l_key+1,1)解析程序的功能是通過給原文中每一個(gè)字符的ASCII值加上一
4、個(gè)數(shù)字得到密文,而這個(gè)數(shù)字需要循環(huán)地截取密鑰來獲取,本題的關(guān)鍵是如何做到循環(huán)截取密 鑰。在程序中,l_code表示原文長度,l_key表示密鑰長度,res_code用于存儲(chǔ)生 成的密文。接下來開始循環(huán)截取原文的每一個(gè)字符,每次截取后進(jìn)行轉(zhuǎn)換,所以循 環(huán)的范圍是1到l_code。在循環(huán)體中,c的值表示截取下來的原文字符的 ASCII 碼,k用于存儲(chǔ)轉(zhuǎn)換后的密文字符 ASCII碼,同時(shí)當(dāng)i的值循環(huán)至大于l_key的時(shí) 候,能夠自動(dòng)回到密鑰字符串 key的第一個(gè)位置重新截取,這里利用了一個(gè) Mid 函數(shù)實(shí)現(xiàn),每次截取的位置為(i-1) Mod l_key+1,如此便可循環(huán)截取,隨后利用res_cod
5、e變量將兩數(shù)相加再轉(zhuǎn)換回字符便得到對應(yīng)的密文字符。2 .小明編寫了一個(gè)字符串加密程序,功能如下:在文本框Text1中輸入明碼,單擊 “加密”按鈕Command1,在文本框Text2中顯示加密后的密文,運(yùn)行界面如下 圖所示。加密算法如下:1)將明碼中每個(gè)字符的八位二進(jìn)制 ASCII碼(不足八位白左端補(bǔ)0,湊足八位)分 成兩段(左4位一段,右4位為另一段),如字符" C'的二進(jìn)制 ASCII值為 01000011,分段后為 0100,0011;2)將高位段(左邊4位)左移一位,并將原第一位數(shù)碼移到第4位(如0100轉(zhuǎn)化為 1000),再轉(zhuǎn)化為十六進(jìn)制數(shù)(如1000化為8);3)對
6、另一段(右4位)執(zhí)行2)所示算法,如0011 011g6;4)順次連接兩位十六進(jìn)制數(shù),得到該字符的暗碼,如“C的暗碼為“86” ;5)將每個(gè)字符的暗碼按照明碼的順序連接。實(shí)現(xiàn)上述功能的VB程序如下,請回答下列問題:(1)按照加密算法,字符“ J”的密文是; 請?jiān)趧澗€處填入合適代碼。Private Sub Command1_Click()Dim i As Integer, j As IntegerDim m As Integer, k As Integer, c As StringDim x As Integer, y As IntegerDim d(1 To 8) As Integer
7、9;數(shù)組d存儲(chǔ)字符ASCII碼二進(jìn)制從左到右的 各位數(shù)碼Dim mw As String ' mw存儲(chǔ)暗碼mw =For i = 1 To Len(Textl.Text)c = Mid(Text1.Text,i,1)Forj = 1 To 8d(j) = 0Next jm = Asc(c)Do While m > 0d(k) = m Mod 2m = m 2k =k-1Loopx = d(1) :y = d(5)Forj = 1 To 3d(j) =d(j+1)Next jd(4) = x:d(8) = ymw = mw + btoh(d)Next iText2.Text = m
8、wEnd Sub'將數(shù)組元素中的二進(jìn)制數(shù)轉(zhuǎn)換成對應(yīng)的十六進(jìn)制數(shù)Function btoh(d() As Integer) As StringDim s As Integer, i As Integer, str1 As String, ch As String str1 ="0123456789ABCDE F: s = 0: ch =For i = 1 To 8s = s * 2 + d(i)If i = 4 Thench = Mid(str1,s+1,1)s = 0End IfNext iEnd Function答案 (1)85(2)k=8 d(j+4)=d(j+5)bto
9、h = ch + Mid(str1,s+1,1)解析(1)字母J的八位二進(jìn)制ASCII碼為01001010,分別對高4位和低4位移位得到1000和0101,對應(yīng)暗碼為“ 85”。(2)第空所在代碼段的作用是把十進(jìn)制數(shù)m轉(zhuǎn)換成二進(jìn)制數(shù)存儲(chǔ)在數(shù)組d中,第空所在代碼段的作用是分別對高4位和低4位進(jìn)行移位操作,第空所在代碼段的作用是將數(shù)組元素中的二進(jìn)制數(shù) 轉(zhuǎn)換成對應(yīng)的十六進(jìn)制數(shù),在For循環(huán)體內(nèi)部將高4位對應(yīng)的暗碼存儲(chǔ)在ch中,循環(huán)結(jié)束后,再將低4位對應(yīng)的暗碼拼接起來,即btoh = ch + Mid(str1,s+1,1)。3 .某字符串(字節(jié)數(shù)為3的倍數(shù))編碼規(guī)則如下:(1)將該字符串內(nèi)碼分成3個(gè)
10、字節(jié)一組,順次連接后得到24位二進(jìn)制數(shù);將得到的24位二進(jìn)制數(shù)字按每6位一組分成4組,每組6個(gè)位; 在每組數(shù)字前補(bǔ)上兩個(gè)0,得到4個(gè)字節(jié)的二進(jìn)制數(shù);將(3)中得到的四個(gè)二進(jìn)制數(shù)分別轉(zhuǎn)換為十進(jìn)制數(shù);(5)將每個(gè)十進(jìn)制數(shù)轉(zhuǎn)換為1個(gè)加密字符,對應(yīng)的“密碼表”按數(shù)值由小到大依 次為 “ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmn opqrstuvwxyz0123456789+/ ” 。小明按照上述方法,設(shè)計(jì)了一個(gè)字符串(僅包含ASCII字符)加密的VB程序,功能 如下:單擊“加密”按鈕 Command辭序依次將文本框 Text1中每3個(gè)字符的 ASCII碼值作為4個(gè)
11、字節(jié)轉(zhuǎn)換為四個(gè)加密字符,連接這些加密字符,最后在文本框 Text2中輸出加密結(jié)果。程序運(yùn)行效果如下圖所示。實(shí)現(xiàn)上述功能的VB程序如下:(1)在上述加密算法步驟(4)中,得到的十進(jìn)制數(shù)最大是 。 實(shí)現(xiàn)上述功能的VB程序如下。請?jiān)趧澗€處填入合適代碼。Function Code2Char(c As Integer) As StringDim s As Strings= "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/Code2Char= End FunctionPrivate Sub Command1_Cli
12、ck()'加密過程'存儲(chǔ)加密前字符的ASCIIDim n As Integer, s As String, i As Integer, ss As StringDim a1 As Integer,a2 As Integer,a3 As IntegerDim b1 As Integer,b2 As Integer'分別存儲(chǔ)分割、轉(zhuǎn)換后的前兩個(gè)十進(jìn)制數(shù)Dim b3 As Integer,b4 As Integer'分別存儲(chǔ)分割、轉(zhuǎn)換后的后兩個(gè)十進(jìn)制數(shù)s = Text1.Text : n= Len(s):ss =For i = 1 To na1 = Asc(Mid(s
13、, i, 1)a2 = Asc(Mid(s, i+1,1) a3 = Asc(Mid(s, i+2,1) bl = al 4b2 = (a1 Mod 4) * 16 + (a2 16)b3 =b4 = a3 Mod 64ss = ss + Code2Char(b1) + Code2Char(b2) + Code2Char(b3) + Code2Char(b4) Next iText2.Text = ssEnd Sub答案 (1) 63 (2)Mid(s,c+1,1)Step 3 (a2 Mod16) * 4 + (a3 64)解析(1)步驟(4)中得到的十進(jìn)制數(shù)對應(yīng)的二進(jìn)制數(shù)的高 2位都是0,
14、則最大值 為00111111B,轉(zhuǎn)換成十進(jìn)制數(shù)為63。十進(jìn)制數(shù)c最小值是0,而密碼表字符串s的最小下標(biāo)是1,故 Code2Char=Mid(s,c+1,1)。明文字符串中每個(gè)字符占1個(gè)字節(jié),每3個(gè)字符為一組,依次存儲(chǔ)在變量a1,a2,a3中,故循環(huán)變量i每次遞增3。本題的難點(diǎn)在于理 解分割二進(jìn)制數(shù)的方法,我們把題目效果圖中的第一組明文的轉(zhuǎn)換過程分析如下 圖:I文TbIASCliq 制數(shù) OIOLOIOO 01101000011010013d«1口G界分成可如0 I 0 I 0 I GC1 0 L 1 0 I OOOn L IOmfIbl bl bl M ASCIIS116334Ltt
15、fJtVClip看懂變量a1,a2,a3和b1,b2,b3,b4的轉(zhuǎn)換關(guān)系,再模仿程序中已知的代碼,應(yīng)該 能填出第空。4 .某日期加密授權(quán)碼生成方法描述如下:授權(quán)碼由10位字符組成,前8位為日期的密文,后2位為驗(yàn)證碼;(2)取日期的第1位字符,若該字符第一次出現(xiàn),則直接取其對應(yīng)加密字符,否則 取下一個(gè)不重復(fù)的加密字符。按此操作,依次取出該日期余下各位對應(yīng)的加密字 符;(3)求出所有日期字符數(shù)值的和,將和除16取余加1得到一位驗(yàn)證碼字符;若和不 小于16,則將和除16取整加1得到另一位驗(yàn)證碼字符,否則另一位驗(yàn)證碼字符為“X”。取出驗(yàn)證碼重復(fù)時(shí),處理規(guī)則與(2)相同。加密(驗(yàn)證碼)字符對應(yīng)表如下:
16、值012 3 4 5 6 7 89 10 11 12 13 14 15(十進(jìn)制)加密(驗(yàn)證碼)KnGj LtWbOaPHZqYc字符小明設(shè)計(jì)了一個(gè)生成8位日期(YYYYMMDD式)授權(quán)碼的VB程序。程序功能如下: 在文本框Text1中輸入一個(gè)8位有效日期,單擊“生成授權(quán)碼”按鈕 Command1, 在標(biāo)簽Label2中顯示出該日期的授權(quán)碼。運(yùn)行效果如圖所示。實(shí)現(xiàn)上述功能的VB程序段如下:0已庫憶t噂&聚=3 £2dJDjniKifl(1)請?jiān)趧澗€處填入合適代碼:Dim f(0 To 15) As IntegerConst Code =" KnGjLtWbOaPHZq
17、Y cPrivate Sub Command1_Click()Dim rq As String, sq As StringDim c As Integer, i As Integer, d As IntegerFor i = 0 To 15f(i) = 0Next irq = Text1.Textsq= :d = 0If Len(rq) <> 8 ThenLabel2.Caption ="請輸入 8 位日期!”ElseFor i = 1 To 8c = Val(Mid(rq, i, 1)d = d + csq = +sqNext iIf d >= 16 Thenyz
18、 = GetChar(d Mod 16 + 1) + GetChar(d16 + 1)Elseyz = GetChar(d Mod 16 + 1) +“X”End IfLabel2.Caption = sq + yzEnd IfEnd Sub'獲取不重復(fù)的加密字符Function GetChar(x As Integer) As StringDim flag As Booleanflag = FalseDo While flag = Falsef(x) = f(x) + 1If f(x) = 1 Thenf(x) = f(x) + 1flag = TrueElsex = (x + 1)
19、 Mod 10End IfLoopEnd Function若輸入的日期是“ 20170818',則該授權(quán)碼的驗(yàn)證碼字符是 。答案 (1)GetChar(c)GetChar=Mid(Code,x+1,1) (2)aL0jbnKGZt解析(1)本題算法思路比較清晰,根據(jù)題目說明,結(jié)合樣例,不難得出代碼。需要 注意的是前8位日期對應(yīng)的加密字符是逆序拼接,后2位驗(yàn)證碼是順序拼接的, 對應(yīng)代碼為 sq=GetChar(c)+sq 和 Label2.Caption=sq+yz °GetChar(x As Integer) 函數(shù)用來獲取不重復(fù)的加密字符,程序用數(shù)組f來標(biāo)記加密字符未被使用過
20、,開 始令數(shù)組f的所有元素值均為0,運(yùn)行函數(shù)時(shí)令f(x)=f(x)+1, 再判斷f(x)是否等 于1,若等于1,則表示該加密字符未被使用過,返回該加密字符(注意x的最小值 為0,而加密字符串的下標(biāo)從 1開始,故GetChar=Mid(Code,x+1,1);若f(x)>1, 則表示該加密字符已經(jīng)被使用過了 ,x要后移一位,為防止x越界,可以對16求余 數(shù),即x=(x+1)Mod 16。 (2)輸入日期“20170818'對應(yīng)加密字符串為“aL0jbnKG",數(shù)字和為 27,GetChar(27 Mod 16+1)為 “Z",GetChar(d 16+1)為 t
21、 05.下面是一種加密解密的方法。當(dāng)輸入一審進(jìn)制數(shù)字,用空格分離時(shí),每個(gè)進(jìn)制數(shù) 字的數(shù)值與字母A”成一一對應(yīng)關(guān)系。小明只要將這用數(shù)字的數(shù)值求出,然后將 數(shù)字值轉(zhuǎn)換成相應(yīng)的字母即破解密碼得到明文。若輸入的進(jìn)制數(shù)值超出126范圍,則當(dāng)成非法數(shù)值。表中數(shù)值100、153屬于非法數(shù)值,用字符“*”表示,在解 密過程中非法字符不予處理。醬乂110010011100010011110110011001對應(yīng)數(shù)值100389141153明文*CHINA*根據(jù)題意,若密文為16進(jìn)制的“68179 E 1F ”,則其明文為。(2)實(shí)現(xiàn)上述功能的VB程序如下,請?jiān)趧澗€處填上合適的代碼。Private Sub Com
22、mand1_Click()'密文解密過程Dim s As String, yw As StringDim n As IntegerAs Integer,k As Integer,value As IntegerDim flag As Boolean s =Text1.Text yw =flag = True n = Len(s) value = 0k = Val(Text4.Text)k為密文的進(jìn)制For i = 1 To nt = Mid(s, i, 1)If flag ThenIf (t <>"" )ThenIf t >="0&quo
23、t; And t <="9"Thenvalue =Else If t >=«A And t <="F" Thenvalue = value*k+Asc(t)- Asc( "A” ) + 10End IfElseflag = FalseIf value <=26 Then yw =Elseyw = yw +“*”End Ifvalue = 0End IfElseIf t >="0" And t <= "9"Thenvalue = Asc(t) - Asc( “0”) flag = TrueElse If t >="A" And t <="F" Thenvalue = Asc(t) - Asc( "A” )+ 10 flag = TrueEnd IfEnd IfNext iIf flag ThenIf value < = 26 Thenyw = yw + Chr(Asc(«A ) + value - 1)Elseyw = yw +“*”End IfEnd IfText2.Text = ywEnd
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《塑料成型工藝及模具設(shè)計(jì)》教學(xué)大綱
- 玉溪師范學(xué)院《數(shù)據(jù)庫原理與應(yīng)用實(shí)訓(xùn)》2022-2023學(xué)年期末試卷
- 很好的分?jǐn)?shù)混合運(yùn)算復(fù)習(xí)教案
- 學(xué)生版教育課件
- 教你看懂狗狗常見的動(dòng)作語言
- 中學(xué)家長會(huì)課件
- 2024年血細(xì)胞分析儀器試劑項(xiàng)目評估分析報(bào)告
- 2024年網(wǎng)絡(luò)及通信協(xié)議處理軟件項(xiàng)目評估分析報(bào)告
- 2023年室內(nèi)LED照明燈具項(xiàng)目成效分析報(bào)告
- 投資學(xué) 第7版 課件 第14章 現(xiàn)代投資銀行
- 中國歷代化妝史課件
- 《圓的面積》優(yōu)秀課件
- saleae邏輯分析儀使用手冊-分析紅外、iic uart通信
- T-SDDA 0002-2021 住宅裝飾裝修工程質(zhì)量驗(yàn)收標(biāo)準(zhǔn)
- 大學(xué)教師教學(xué)任務(wù)書
- 湖北省 公路工程試驗(yàn)檢測設(shè)備期間核查規(guī)范DB42∕T 1544-2020
- 用理正巖土計(jì)算邊坡穩(wěn)定性
- GB 18613-2020 電動(dòng)機(jī)能效限定值及能效等級
- 全套高中生物思維導(dǎo)圖word清晰打印版
- 滬教牛津版五年級下冊小學(xué)英語全冊單元知識點(diǎn)小結(jié)
- 公安機(jī)關(guān)辦理行政案件程序規(guī)定習(xí)題庫及參考答案
評論
0/150
提交評論