package test; import java.util.Scanner; public class test1 { private static final String ALPHABET = "abcdefghijklmnopqrstuvwxyz"; public static void main(String[] args) { String encryptedText=""; Scanner sys =new Scanner(System.in); System.out.println("请输入明文"); String plainText=sys.next(); System.out.println("请输入密钥a"); int keyA=sys.nextInt(); System.out.println("请输入密钥b"); int keyB=sys.nextInt(); if(gcd(keyA,keyB)==1){ encryptedText = encrypt(plainText, keyA, keyB); System.out.println("加密后的文本: " + encryptedText); } else { System.out.println("密钥必须互素"); } if(gcd(keyA,keyB)==1){ String decryptedText = decrypt(encryptedText, keyA, keyB); System.out.println("解密后的文本: " + decryptedText); } else { System.out.println("密钥必须互素"); } } public static String encrypt(String text, int keyA, int keyB) { StringBuilder result=new StringBuilder(); for(char c: text.toCharArray()){ if(Character.isLetter(c)){ int position=ALPHABET.indexOf(Character.toLowerCase(c)); char encryptedChar=ALPHABET.charAt((keyA*position+keyB)%ALPHABET.length()); if(Character.isUpperCase(c)){ result.append(Character.toUpperCase(encryptedChar)); }else { result.append(encryptedChar); } }else { result.append(c); } } return result.toString(); } public static String decrypt(String text, int keyA, int keyB) { StringBuilder result = new StringBuilder(); int modInverse = 0; for (int i = 0; i < ALPHABET.length(); i++) { if ((keyA * i) % ALPHABET.length() == 1) { modInverse = i; break; } } for(char c:text.toCharArray()){ if (Character.isLetter(c)){ int position=ALPHABET.indexOf(Character.toLowerCase(c)); char decryptedChar=ALPHABET.charAt(modInverse * (position - keyB + ALPHABET.length()) % ALPHABET.length()); if(Character.isUpperCase(c)){ result.append(Character.toUpperCase(decryptedChar)); }else { result.append(decryptedChar); } }else { result.append(c); } } return result.toString(); } public static int gcd(int a, int b) { while (b != 0) { int temp = b; b = a % b; a = temp; } return a; } }