作者:痴情小猪噜噜1907181048 | 来源:互联网 | 2024-11-24 15:16
Java实现凯撒密码的简易加解密程序
1. 凯撒密码简介
凯撒密码源于古罗马时期的军事通信,由当时的军事统帅朱利叶斯·凯撒发明,用于保护信息不被敌方截获。该密码的工作原理是通过将原文中的每个字母按固定的位数向前或向后移动,形成新的字母,以此达到加密的效果。例如,若设定偏移量为3,则字母A会变成D,B变成E,以此类推。
2. 程序需求分析
为了实现凯撒密码的加解密功能,需要用户输入待加密的文本和一个作为密钥的数字。程序根据这个数字对文本中的每个字符进行相应的位移操作,完成加密过程。解密则是加密的逆过程,使用相同的密钥对加密后的文本进行反向位移,恢复原始文本。
3. 技术原理
- 在Java中,可以通过ASCII码对字符进行数学运算来实现字符的位移。对于大写字母和小写字母,它们的ASCII码范围分别是65-90和97-122。当字符经过位移后超出了这些范围时,需要通过取模运算来调整回正确的范围内。
- 具体来说,如果字符是小写字母且位移后超过了'z',则应减去26使其回到小写字母的起始位置;如果是大写字母且位移后超过了'Z',同样减去26。相反地,如果位移导致字符低于'a'或'A',则应加上26。
4. 示例代码
import java.util.Scanner;
public class CaesarCipher {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请选择操作:[E] 加密 [D] 解密");
String choice = scanner.nextLine();
if (choice.equalsIgnoreCase("E")) {
encrypt(scanner);
} else if (choice.equalsIgnoreCase("D")) {
decrypt(scanner);
}
}
private static void encrypt(Scanner scanner) {
System.out.println("请输入明文:");
String plainText = scanner.nextLine();
System.out.println("请输入密钥:");
int key = scanner.nextInt();
String encryptedText = shiftText(plainText, key);
System.out.println("加密后的文本为:" + encryptedText);
}
private static void decrypt(Scanner scanner) {
System.out.println("请输入密文:");
String cipherText = scanner.nextLine();
System.out.println("请输入密钥:");
int key = scanner.nextInt();
String decryptedText = shiftText(cipherText, -key);
System.out.println("解密后的文本为:" + decryptedText);
}
private static String shiftText(String text, int key) {
StringBuilder result = new StringBuilder();
for (char character : text.toCharArray()) {
if (Character.isLetter(character)) {
char base = Character.isUpperCase(character) ? 'A' : 'a';
char shiftedChar = (char) (((character + key - base) % 26) + base);
result.append(shiftedChar);
} else {
result.append(character);
}
}
return result.toString();
}
}
5. 运行结果
以下是程序运行的结果示例,展示了如何对文本进行加密和解密:
加密示例:
解密示例: