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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

换位加密、解密算法

發布時間:2023/12/15 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 换位加密、解密算法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

換位密碼算法方案,又稱為置換加密方案,其根據一定的規則重新安排明文字母,使之成為密文。換位密碼是最簡單的密碼學算法。

1. 換位加密、解密算法

換位加密解密的算法有很多種,這里介紹基于二維數組移位的換位加密、解密算法。二維數組移位的換位加密、解密算法即將明文字符串按照一個給定的順序保存在二維數組中,然后按照另外一個順序讀出,便的到密文。執行相反的過程便可以恢復出明文。

1)換位加密算法

基于二維數組移位的加密算法的操作步驟如下:

(1)給定一個二維數組的列數,即該二維數組每行可以保存的字符個數。

(2)將明文字符串按行依次排列到該二維數組中。

(3)按列讀出該二維數組中的字符,這樣便得到密文。

可以根據此思路來編寫相應的加密算法,代碼示例如下:

/*** 加密算法* @param str 明文* @param n 指定的二維數組的列數* @return*/static char[] jiami(char[] str,int n){int len,d,i,j,m;char[] temp,miwen;len=str.length;if((d=len%n)!=0){len = len + n-d;}temp = new char[len];m=len/n;for(i=0;i<m;i++){for(j=0;j<n;j++){if(i*n+j<str.length){temp[i+m*j]=str[i*n+j];}else{temp[i+m*j]=' ';}}}while(temp[len-1]==' '){len--;}miwen = new char[len];for(i=0;i<len;i++){miwen[i]=temp[i];}return miwen;}

2)換位解密算法

基于二維數組移位的解密算法的操作步驟如下:

(1)給定一個二維數組的列數,即該二維數組每行可以保存的字符個數。這個數應該和加密算法中的一致。

(2)將密文字符串按列一次排列到該二維數組中。

(3)按行讀出該二維數組中的字符,這樣便得到明文。

可以根據此思路來編寫相應的解密算法,代碼示例如下:

/*** 解密算法* @param miwen 密文* @param n 指定的二維數組的列數(與加密算法相同)* @return*/static char[] jiemi(char[] miwen,int n){int len,d,i,j,m;char[] temp,str; len=miwen.length;if((d=len%n)!=0){len = len + n-d;}temp = new char[len];m=len/n;for(i=0;i<n;i++){for(j=0;j<m;j++){if(i*m+j<miwen.length){temp[i+j*n]=miwen[i*m+j];}else{temp[i+n*j]=' ';} }}while(temp[len-1]==' '){len--;}str = new char[len];for(i=0;i<len;i++){str[i]=temp[i];}return str;}

2. 換位加密、解密算法實例

完整的程序代碼示例如下:

package com.cn.mimaxue; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Scanner;public class JiaMiJieMi {/*** 加密算法* @param str 明文* @param n 指定的二維數組的列數* @return*/static char[] jiami(char[] str,int n){int len,d,i,j,m;char[] temp,miwen;len=str.length;if((d=len%n)!=0){len = len + n-d;}temp = new char[len];m=len/n;for(i=0;i<m;i++){for(j=0;j<n;j++){if(i*n+j<str.length){temp[i+m*j]=str[i*n+j];}else{temp[i+m*j]=' ';}}}while(temp[len-1]==' '){len--;}miwen = new char[len];for(i=0;i<len;i++){miwen[i]=temp[i];}return miwen;}/*** 解密算法* @param miwen 密文* @param n 指定的二維數組的列數(與加密算法相同)* @return*/static char[] jiemi(char[] miwen,int n){int len,d,i,j,m;char[] temp,str; len=miwen.length;if((d=len%n)!=0){len = len + n-d;}temp = new char[len];m=len/n;for(i=0;i<n;i++){for(j=0;j<m;j++){if(i*m+j<miwen.length){temp[i+j*n]=miwen[i*m+j];}else{temp[i+n*j]=' ';} }}while(temp[len-1]==' '){len--;}str = new char[len];for(i=0;i<len;i++){str[i]=temp[i];}return str;}public static void main(String[] args) throws IOException{char[] str,miwen,jiemi;int n,i;String go;Scanner input = new Scanner(System.in);do{System.out.print("請輸入指定的二維數組的列數:");n = input.nextInt();System.out.print("請輸入明文:");BufferedReader br = new BufferedReader(new InputStreamReader(System.in));String strtemp=br.readLine();str=strtemp.toCharArray();System.out.print("明文為:");for(i=0;i<str.length;i++){System.out.print(str[i]);}System.out.println();miwen=jiami(str,n);System.out.print("密文為:");for(i=0;i<miwen.length;i++){System.out.print(miwen[i]);}System.out.println();jiemi=jiemi(miwen,n);System.out.print("解密為:");for(i=0;i<jiemi.length;i++){System.out.print(jiemi[i]);}System.out.println();System.out.print("是否繼續(y/n):");go = input.next();}while(go.equalsIgnoreCase("y")); System.out.println("退出程序!");} }

程序運行結果如下:

請輸入指定的二維數組的列數:4 請輸入明文:Hello everyone! 明文為:Hello everyone! 密文為:Hoene reley!lvo 解密為:Hello everyone! 是否繼續(y/n):y 請輸入指定的二維數組的列數:5 請輸入明文:You are very good! 明文為:You are very good! 密文為:Yrrooeydu ! vg aeo 解密為:You are very good! 是否繼續(y/n):n 退出程序!

?

總結

以上是生活随笔為你收集整理的换位加密、解密算法的全部內容,希望文章能夠幫你解決所遇到的問題。

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