日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

栅栏密码解密——Java实现

發布時間:2023/12/31 java 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 栅栏密码解密——Java实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

柵欄密碼


實驗目的:理解典型移位密碼的加解密原理
實驗原理:
柵欄密碼屬于古典密碼中最經典的移項式密碼,同之前講到的凱撒密碼等替 換式密碼代表了密碼學中最重要的兩個概念(擴散和混淆)
我們以2欄柵欄密碼為例來講解它的加密和解密過程。
加密過程:
明文:THERE_IS_A_CIPHERK
兩個一組,得到:(TH) (ER) (E_) (IS) (_A) (_C) (IP) (HE) (RK)
先每組中取出第一個字母:TEEI__IHR
再從每組中取出第二個字母:HR_SACPEK
連在一起得到密文:TEEI__IHRHR_SACPEK
解密過程:
而解密的時候,我們先把密文從中間分開,變為兩行:
TEEI__IHR
HR_SACPEK
再按上下上下的順序組合起來:
THERE_IS_A_CIPHERK
那么如何將2欄密碼擴展到多欄呢?在之前的明文中,CIPHER這個單詞之后加了一個下劃線,目的就是為了讓明文字符串的長度是2的倍數,柵欄密碼的分欄的一個前提就是分的欄數需是明文長度的因數,這樣才會使得分出來的每個欄長度都一樣。
對于多欄,我們還是用上面的例子來講解。
上面的明文字符串(THERE-IS_A_CIPHER-)的長度是18=233 ,所以我們可以把它分為2,3,4,6,9欄,這里我們以6欄為例。
以每個元素相隔6個字符分割出柵欄。
第一欄:TII
第二欄:HSP
第三欄:E_H
第四欄:RAE
第五欄:E_R
第六欄:-C-
連接在一起得到密文:TIIHSPE_HRAEE_R-C-

實驗要求:
1.解密文本:_pry_iosncta_aguccropi_osieyghsrr_e-
2.將所有可能分的欄,均恢復出相應的明文

import java.util.ArrayList;//柵欄密碼 public class Demo {public static void main(String[] args) {String str = "_pry_iosncta_aguccropi_osieyghsrr_e-";//通過字符長度的因數判斷可設置的分欄數nArrayList<Integer> n = new ArrayList<>();for(int x=2;x<str.length();x++) {if(str.length()%x == 0) {n.add(x);}}//輸出所有分欄可能for(int i:n) {System.out.println("可分為"+i+"欄:");//設置二維字符數組分別存儲各分欄字符char[][] num = new char[i][str.length()/i];//遍歷打印i欄for(int j=0;j<i;j++) { //cut為各分欄字符串String cut = str.substring(j*str.length()/i, j*str.length()/i+str.length()/i);//num數組每行存儲各分欄字符串cutnum[j] = cut.toCharArray();System.out.println(cut); };//解密過程實現//設置end集合存儲存儲Character對象取得解密結果ArrayList<Character> end = new ArrayList<>();//通過二維數組存儲每個字符,使各字符可定位for(int k = 0; k < num.length; k++) {for(int j = 0; j <num[k].length; j++) {for(int m = 0; m < num.length; m++) {end.add(num[m][j]);}}}//輸出結果System.out.println("--------------------");System.out.println(i+"分欄連接在一起得到密文為:");//遍歷截取解密結果并輸出for(int y=0;y<end.size()/i;y++) {//字符不換行銜接打印System.out.print(end.get(y));}System.out.println();System.out.println("--------------------");}} }

總結

以上是生活随笔為你收集整理的栅栏密码解密——Java实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。