只做到了e不变的情况
package practice1;
import java.util.Scanner;
public class Hello {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
String str1 = input.nextLine();
int[] count = new int[26];
for(int i = 0;i <str1.length();i++){
char tmp = str1.charAt(i);
if(tmp >= 65 && tmp <= 90){
int index = tmp - 65;
count[index]++;
}
}
for(int i = 0;i < count.length;i++){
if(count[i] != 0)
System.out.println((char)(i+65)+"次数为" + count[i]);
}//统计并输出字符个数
int max1 = ABCMax(count);
int max2 = ABCMax(count);
while(max2 != -1){
System.out.println(max2);
int a= jiea(max1,max2);
int b =jieb(a,max1);
a = intni(a);
System.out.println();
shuchu(str1,a,b);
max2 = ABCMax(count);
}
}
public static int ABCMax(int[] a){
int max = a[0];int localMax = 0;
for(int i=1;i<a.length;i++){
if(a[i] > max){
max = a[i];
localMax = i;
}
}
a[localMax] = 0;
if(max > 1)
return localMax;
else
return -1;
}//字母出现的频率
public static int jiea(int a,int b){
int t = b-a;
if(t<0)
t = 26-(-t);
for(int i=0;i < 10000;i++){
if((i*15)%26 == t)
return i;
}
return -1;
}//ax+b的a
public static int jieb(int a,int b){
for(int i=0;i < 10000;i++){
if((4*a+i)%26 == b)
return i;
}
return -1;
}//ax+b的b
public static int jiemi(int a,int b,int y){
int i = (a*y - (a*b)%26)%26;
if(i < 0){
i = 26-(-i);
}
return i+97;
}//解密字母
public static int intni(int a){
for(int i=0;i < 10000;i++){
if((i*a)%26 == 1){
return i;
}
}
return -1;
}//求a的乘法逆元
public static void shuchu(String str1,int a,int b){
for(int i=0;i <str1.length();i++){
int changeA = (int)str1.charAt(i)-65;
System.out.print((char)jiemi(a,b,changeA));
}
}//直接输出明文
}
运行结果:
输入
FMXVEDKAPHFERBNDKRXRSREFMORUDSDKDVSHVUFEDKAPRKDLYEVLRHHRH
解得
ohwypqjtemopcsgqjcwcbcpohfczqbqjqybmyzopqjtecjqivpyicmmcm
mfuwnohrckmnaqeohauazanmfdaxozohowzkwxmnohrcahogtnwgakkak
gzoqhiblweghukyibuoutuhgzxuritibiqteqrghiblwubianhqaueeue
algorithmsarequitegeneraldefinitionsofarithmeticprocesses
kdsulmfpaiklyocmfysyxylkdbyvmxmfmuxiuvklmfpayfmerlueyiiyi
exmofgzjucefsiwgzsmsrsfexvspgrgzgorcopefgzjuszgylfoysccsc
ghqmrcdjakgreywcdeqeterghlexctcdcmtkmxgrcdjaedcsfrmsekkek
knocrybtswkremgybeoexerknzejyxybycxwcjkrybtsebyuhrcuewwew
yrgizatdowyzmcqatmgmlmzyrpmjalatailwijyzatdomtasfzismwwmw
otmsruzdkioreaquzemeberotnevubuzusbisvoruzdkezuwjrsweiiei
qjyarslvgoqreuisleyederqjhebsdslsadoabqrslvgelskxrakeooeo
wfiyrmvxugwreckmveiejerwfpetmjmvmyjgytwrmvxuevmanryaeggeg
atikbcvfqyaboescvoionobatrolcncvcknyklabcvfqovcuhbkuoyyoy
可以看出第四行是有意义的明文。
algorithmsarequitegeneraldefinitionsofarithmeticprocesses