维吉尼亚密码加密和解密的java代码
时间: 2024-10-19 11:02:58 浏览: 50
维吉尼亚密码(Vigenere Cipher)是一种古典的替换式密码,它使用一个简单的字母表替代模式来加密文本。这个模式通常是一个密钥(也可能是单词),重复应用于原文中的每个字符。以下是一个基本的Java代码实现维吉尼亚密码的加密和解密过程:
```java
import java.util.HashMap;
import java.util.Map;
public class VigenereCipher {
private static final char ALPHABET[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
// 加密函数
public static String encrypt(String plaintext, String key) {
int keyIndex = 0;
StringBuilder encryptedText = new StringBuilder();
for (char c : plaintext.toCharArray()) {
if (Character.isLetter(c)) {
int shift = ALPHABET.indexOf(key.charAt(keyIndex++ % key.length()));
char encryptedChar = (c + shift) % 26 + 'A';
encryptedText.append(encryptedChar);
} else {
encryptedText.append(c);
}
}
return encryptedText.toString();
}
// 解密函数
public static String decrypt(String ciphertext, String key) {
int keyIndex = 0;
StringBuilder decryptedText = new StringBuilder();
for (char c : ciphertext.toCharArray()) {
if (Character.isLetter(c)) {
int shift = -ALPHABET.indexOf(key.charAt(keyIndex++ % key.length()));
char decryptedChar = (c - shift + 26) % 26 + 'A';
decryptedText.append(decryptedChar);
} else {
decryptedText.append(c);
}
}
return decryptedText.toString();
}
// 示例用法
public static void main(String[] args) {
String plaintext = "SECRET MESSAGE";
String key = "KEYWORD";
System.out.println("Original Text: " + plaintext);
System.out.println("Encrypted Text: " + encrypt(plaintext, key));
System.out.println("Decrypted Text: " + decrypt(encrypt(plaintext, key), key));
}
}
```
在这个代码中,`encrypt`方法接收明文和密钥,对每个字母进行位移并替换为密文;`decrypt`方法则执行相反的操作,将密文恢复回原文。
阅读全文