java实现维吉尼亚密码加密解密
时间: 2024-10-19 19:14:52 浏览: 23
维吉尼亚加密算法的JAVA实现
在Java中,你可以使用字符数组和循环来实现维吉尼亚密码的加密和解密。下面是一个简单的例子,展示了如何创建一个类来进行维吉尼亚密码的操作:
```java
import java.util.Arrays;
public class VigenereCipher {
private static final char[] ALPHABET = "ABCDEFGHIJKLMNOPQRSTUVWXYZ".toCharArray();
private String key; // 保存密钥
// 构造函数接受密钥作为参数
public VigenereCipher(String key) {
this.key = key.toUpperCase();
}
// 加密方法
public String encrypt(String message) {
StringBuilder encrypted = new StringBuilder();
for (int i = 0; i < message.length(); i++) {
char c = message.charAt(i);
if (Character.isLetter(c)) { // 只处理字母字符
int shift = getShiftValue(c); // 获取基于当前字母和密钥的偏移值
char encryptedChar = (char) ((ALPHABET[(ALPHABET.indexOf(c) + shift - 'A') % 26] + 'A')); // 加密并保持在字母范围内
encrypted.append(encryptedChar);
} else { // 非字母字符不变
encrypted.append(c);
}
}
return encrypted.toString();
}
// 解密方法原理与加密相似,只需将偏移量反向计算
public String decrypt(String encrypted) {
// 实现细节与encrypt方法类似,这里省略
}
// 计算字母在偏移后的索引
private int getShiftValue(char baseChar) {
int keyIndex = key.indexOf(baseChar) % key.length();
return keyIndex == 0 ? key.length() - 1 : keyIndex;
}
}
// 使用示例
VigenereCipher cipher = new VigenereCipher("SECRET_KEY");
String plaintext = "HELLO WORLD";
String encrypted = cipher.encrypt(plaintext);
System.out.println("Encrypted: " + encrypted);
```
阅读全文