加密位移的实现

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!"。

通过以上步骤,我们成功实现了加密位移的功能。