java實現(xiàn)仿射密碼加密解密
本文實例為大家分享了java實現(xiàn)仿射密碼加密解密的具體代碼,供大家參考,具體內(nèi)容如下
加密:將明文轉(zhuǎn)化為對應(yīng)的數(shù)字,如 ‘a(chǎn)'-> 0, ‘b'->1,…,'1'->26,'2'->27,…然后將數(shù)字進行仿射運算,求取出來的數(shù)字再轉(zhuǎn)化為字符。即 密文=(K1*明文+K2)mod36
解密:密文轉(zhuǎn)化為對應(yīng)數(shù)字,然后進行仿射的逆運算,得到對應(yīng)數(shù)字,然后將其轉(zhuǎn)化為字符明文。解密 K3是K1的乘法逆元
import java.util.Scanner;
public class Affine{
public static void main(String[] args) {
char[] form = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N',
'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '0'
, '1', '2', '3', '4', '5', '6', '7', '8', '9'};
Scanner sc = new Scanner(System.in);
System.out.println("請輸入待加密的明文:");
String MingWen = sc.nextLine();
MingWen=MingWen.toUpperCase();//將輸入的明文全部大寫
final int K1 = 103;
final int K2 = 103;
final int K3 = 31;
int [] cipherNum=new int[MingWen.length()];//用來存儲數(shù)字化的密文
encryption(MingWen,form,K1,K2,cipherNum);
decryption(form,MingWen,K2,K3,cipherNum);
}
public static void encryption(String MingWen,char[] form,int K1,int K2,int[] cipherNum){
//第一步:將明文存入數(shù)組
char[] pla=new char[MingWen.length()];
for (int i = 0; i <MingWen.length() ; i++) {
pla[i]=MingWen.charAt(i);
}//已將明文存入字符數(shù)組pla中
//第二步:通過腳標找到明文中每個字符對應(yīng)的數(shù),參與加密運算
int[] MingWenNumber=new int[pla.length];
for (int i = 0; i <pla.length ; i++) {
for (int j = 0; j <form.length ; j++) {
if (form[j]==pla[i]) {
MingWenNumber[i] = j;
}
}
}
//通過腳標將明文全部轉(zhuǎn)化為數(shù)字
char[] cipher = new char[MingWen.length()];//cipher密碼數(shù)組 用來存儲密文
for (int i = 0; i <MingWen.length() ; i++) {
int a= Math.floorMod((K1*MingWenNumber[i]+K2),36);
cipherNum[i]=a;
cipher[i]=form[a];
//計算密文并存入數(shù)組中
}
System.out.println("加密結(jié)果是:");
System.out.println(cipher);
}
public static void decryption(char[] form,String Mingwen,int K2,int K3,int[] cipherNum){
char[] JieMI=new char[Mingwen.length()];
for (int i =0;i<Mingwen.length();i++){
JieMI[i]=form[Math.floorMod(K3*(cipherNum[i]-K2),36)];
}
System.out.println("解密結(jié)果是:");
System.out.println(JieMI);
}
}
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
使用Feign調(diào)用時添加驗證信息token到請求頭方式
這篇文章主要介紹了使用Feign調(diào)用時添加驗證信息token到請求頭方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-03-03
Java實現(xiàn)企業(yè)發(fā)放的獎金根據(jù)利潤提成問題
這篇文章主要介紹了請利用數(shù)軸來分界,定位。注意定義時需把獎金定義成長整型,需要的朋友可以參考下2017-02-02
Eclipse項目怎么導(dǎo)入IDEA并運行(超詳細)
這篇文章主要介紹了Eclipse項目怎么導(dǎo)入IDEA并運行(超詳細),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-10-10
postgresql 實現(xiàn)16進制字符串轉(zhuǎn)10進制數(shù)字
這篇文章主要介紹了postgresql 實現(xiàn)16進制字符串轉(zhuǎn)10進制數(shù)字操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-02-02

