加密位移的实现
1. 流程图
flowchart TD
A[输入明文字符串] --> B(将字符串转换为字符数组)
B --> C(遍历数组进行位移加密)
C --> D(将加密后的字符数组转换为字符串)
D --> E[输出密文字符串]
2. 代码实现
public class Encryption {
public static void main(String[] args) {
// 输入明文字符串
String plaintext = "Hello, World!";
// 将字符串转换为字符数组
char[] plaintextArray = plaintext.toCharArray();
// 遍历数组进行位移加密
int shift = 3; // 位移数量
for (int i = 0; i < plaintextArray.length; i++) {
// 判断字符是否为字母
if (Character.isLetter(plaintextArray[i])) {
// 获取字符的ASCII码
int ascii = (int) plaintextArray[i];
// 判断字符是否为大写字母
if (Character.isUpperCase(plaintextArray[i])) {
// 对大写字母进行位移加密
ascii = (ascii - 'A' + shift) % 26 + 'A';
} else {
// 对小写字母进行位移加密
ascii = (ascii - 'a' + shift) % 26 + 'a';
}
// 更新字符数组
plaintextArray[i] = (char) ascii;
}
}
// 将加密后的字符数组转换为字符串
String ciphertext = new String(plaintextArray);
// 输出密文字符串
System.out.println("Ciphertext: " + ciphertext);
}
}
3. 代码解析
3.1 将字符串转换为字符数组
String plaintext = "Hello, World!";
char[] plaintextArray = plaintext.toCharArray();
首先,我们需要将输入的明文字符串转换为字符数组,方便后续的遍历和操作。
3.2 遍历数组进行位移加密
int shift = 3;
for (int i = 0; i < plaintextArray.length; i++) {
if (Character.isLetter(plaintextArray[i])) {
int ascii = (int) plaintextArray[i];
if (Character.isUpperCase(plaintextArray[i])) {
ascii = (ascii - 'A' + shift) % 26 + 'A';
} else {
ascii = (ascii - 'a' + shift) % 26 + 'a';
}
plaintextArray[i] = (char) ascii;
}
}
对于每个字符,我们首先判断它是否为字母。如果是字母,我们获取其ASCII码,并根据字母的大小写进行不同的位移加密:
- 对于大写字母,我们将其ASCII码减去'A',然后加上位移量shift,再取模26(字母表大小),最后加上'A',得到加密后的ASCII码。
- 对于小写字母,我们将其ASCII码减去'a',然后加上位移量shift,再取模26,最后加上'a',得到加密后的ASCII码。
更新字符数组,将加密后的字符替换原来的字符。
3.3 将字符数组转换为字符串
String ciphertext = new String(plaintextArray);
完成位移加密后,我们需要将字符数组转换回字符串形式,以便输出密文。
4. 示例输出
输入明文字符串为:"Hello, World!",位移量为3,运行程序后,输出密文字符串为:"Khoor, Zruog!"。
通过以上步骤,我们成功实现了加密位移的功能。