java实现仿射变换加密解密
时间: 2023-08-16 17:07:33 浏览: 187
仿射变换加密解密是一种基于数学运算的加密解密方法,可以通过一系列简单的数学运算来加密和解密数据。下面是一个基于Java的仿射变换加密解密的实现代码:
```java
import java.util.Scanner;
public class AffineCipher {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入要加密的字符串:");
String plainText = scanner.nextLine();
int a = 5; // 仿射变换参数a
int b = 8; // 仿射变换参数b
// 加密
String cipherText = encrypt(plainText, a, b);
System.out.println("加密后的字符串为:" + cipherText);
// 解密
String decryptedText = decrypt(cipherText, a, b);
System.out.println("解密后的字符串为:" + decryptedText);
}
/**
* 加密方法
* @param plainText 要加密的字符串
* @param a 仿射变换参数a
* @param b 仿射变换参数b
* @return 加密后的字符串
*/
public static String encrypt(String plainText, int a, int b) {
StringBuilder stringBuilder = new StringBuilder();
for (int i = 0; i < plainText.length(); i++) {
char ch = plainText.charAt(i);
if (ch >= 'a' && ch <= 'z') {
int x = ch - 'a';
int y = (a * x + b) % 26;
char encrypted = (char) ('a' + y);
stringBuilder.append(encrypted);
}
else if (ch >= 'A' && ch <= 'Z') {
int x = ch - 'A';
int y = (a * x + b) % 26;
char encrypted = (char) ('A' + y);
stringBuilder.append(encrypted);
}
else {
stringBuilder.append(ch);
}
}
return stringBuilder.toString();
}
/**
* 解密方法
* @param cipherText 要解密的字符串
* @param a 仿射变换参数a
* @param b 仿射变换参数b
* @return 解密后的字符串
*/
public static String decrypt(String cipherText, int a, int b) {
StringBuilder stringBuilder = new StringBuilder();
// 计算a的逆元a'
int aInverse = -1;
for (int i = 0; i < 26; i++) {
if ((a * i) % 26 == 1) {
aInverse = i;
break;
}
}
for (int i = 0; i < cipherText.length(); i++) {
char ch = cipherText.charAt(i);
if (ch >= 'a' && ch <= 'z') {
int y = ch - 'a';
int x = (aInverse * (y - b + 26)) % 26;
char decrypted = (char) ('a' + x);
stringBuilder.append(decrypted);
}
else if (ch >= 'A' && ch <= 'Z') {
int y = ch - 'A';
int x = (aInverse * (y - b + 26)) % 26;
char decrypted = (char) ('A' + x);
stringBuilder.append(decrypted);
}
else {
stringBuilder.append(ch);
}
}
return stringBuilder.toString();
}
}
```
上面的代码实现了一个简单的仿射变换加密解密方法,可以加密和解密字符串。其中,仿射变换的参数a和b可以自己定义,这里默认设置为a=5、b=8。在实际应用中,可以根据需要调整这两个参数,以获得更好的加密效果。
阅读全文