使用js實現5種加密解密演算法(凱撒密碼、字母倒排序、單表置換、維基利亞、轉換加密演算法)
在學習作業系統的時候,我們會學到系統安全的章節,而在這一塊會有關於加密解密演算法的學習。
一共有5種常見的加密解密演算法:凱撒密碼、字母倒排序、單表置換、維基利亞、轉換加密演算法。
我使用了js實現了這5種演算法,而且做了視覺化處理、輸入輸出格式化處理,使得操作起來非常方便,下面是實現後整體的效果:
1.這裡是原始碼下載地址(Github):
2.五種加密解密演算法的基本原理
①單字母替換加密方法——愷撒密碼
加密方法是把英文字母按字母表的順序編號作為明文,將金鑰定為m,加密演算法為將明文加上金鑰m,得到密碼錶,通過相反的過程由密文得到明文。
②單字母替換加密方法——字母倒排序
在加密、解密的過程中明文和密文按照字母表的順序倒排對應,即A對應Z,B對應Y。
③單字母替換加密方法——單表置換密碼
由金鑰Key構造字元置換表,完成加密和解密過程。
④多字母替換加密方法——維吉利亞密碼
假設明文m=m1 m2 m3 … mn;金鑰k=k1k2 k3 … kn,對應密文c=c1 c2 c3 … cn,密文為:ci=(mi+ki )mod 26 ,26個字母的序號依次為0~25,ci , mi ,,ki是分別是密文明文金鑰中第i個字母的序號。
⑤轉換加密方法
通過將明文每m個字元一組按順序分為若干個字串,再按照先列後行形成密文,並分析給出解密的方法。或者通過給出一個金鑰字串,將明文按金鑰字串長度按順序分為若干組字串,再按照金鑰字串各個字元的順序形成密文,並分析給出解密的方法。
3.基礎功能設計
①清空功能:
②加密解密單選設計:
③選單設定:
④訊息提醒設定:
4.測試過程
(一)凱撒密碼
①加密實驗
輸入資料:
Input:ABCDEFGH
Num:4
輸出資料:
Output:EFGHIJKL
②解密實驗
輸入資料:
Input:EFGHIJKL
Num:4
輸出資料:
Output:ABCDEFGH
(二)字母倒排序
①加密實驗
輸入資料:
Input:important
輸出資料:
Output:rnkligzmg
②解密實驗
輸入資料:
Input
輸出資料:
Output:important
(三)單表置換
①加密實驗
輸入資料:
Input:important
key:BEIJINGTSINGHUA(北京清華)
輸出資料:
Output:HDLKOQBFQ
②解密實驗
輸入資料:
Input:HDLKOQBFQ
key:BEIJINGTSINGHUA(北京清華)
輸出資料:
Output:important
(四)維基利亞
①加密實驗
輸入資料:
Input:information
key:STAR
輸出資料:
Output:AGFFJFAKAHN
②解密實驗
輸入資料:
Input:AGFFJFAKAHN
key:STAR
輸出資料:
Output:information
(五)轉換加密(1)
①加密實驗
輸入資料:
Input:it can allow students to get close up views
Num:5
輸出資料:
Output:iasngovtlttesiclusteeaodtcuwnweolps
②解密實驗
輸入資料:
Input:iasngovtlttesiclusteeaodtcuwnweolps
Num:5
輸出資料:
Output:itcanallowstudentstogetcloseupviews
(六)轉換加密(2)
①加密實驗
輸入資料:
Input:wu han university of technology
Key:MISXTONG
輸出資料:
Output:IOL*UETGWVFONYO*UTN*HREYNIH*ASC*
②解密實驗
輸入資料:
Input:IOL*UETGWVFONYO*UTN*HREYNIH*ASC*
輸出資料:
Output:wuhanuniversityoftechnology
5.注意事項
(一).本專案為了增加可操作性、增加檢視畫面感、進行輸入輸出驗證,使用了Vue.js中資料繫結的功能以及Element UI外掛
(二).主體程式碼都在code_index.html中,程式碼總量600餘行。進行了詳細地標註
(三).在轉化加密的實現過程中會有一個不可避免的BUG,那就是當以相應的柵欄間隔對字串進行分割形成相應二維陣列的時候,由於其先行後列進行排序,再先列後行進行排序,所以如果二維陣列尾部出現空字元,則在這個變化的過程中會無故丟失資料的結構,導致排序的錯亂。
我想到了兩種解決方法:
①通過限時使用者的輸入格式,使得最終形成的二維陣列不會有空字元存在,這樣也就避免了相應的資料丟失,如下圖所示:
②通過在先行後列和先列後行的排序中對於空字元進行識別,替換成一個特殊字元,以彌補資料結構的缺失,本實驗中採用的是“*”這一特殊字元,如下圖所示: