java - 带有空格字符的凯撒密码保持不变

标签 java cryptography caesar-cipher

我试图让加密函数忽略用户输入中单词之间的空格和符号。我应该使用 isWhitespace 还是什么?以及如何实现?

这个程序的输出是完全正确的,它将每个字母移动到下一个 7 个字母。但它不接受移动 2 个由空格或逗号分隔的单词。

我是 Java 令人惊叹的世界的新手,我真的很喜欢它!因此,这是我开始工作以来的第三周。

import java.util.Scanner;

public class Test_Cipher{
    public static final String ALPHABET = "abcdefghijklmnopqrstuvwxyz";

    public static String encrypt(String plainText, int shiftKey) {
        plainText = plainText.toLowerCase();
        String cipherText = "";
        for (int i = 0; i < plainText.length(); i++) {
            int charPosition = ALPHABET.indexOf(plainText.charAt(i));
            int keyVal = (shiftKey + charPosition) % 26;
            char replaceVal = ALPHABET.charAt(keyVal);
            cipherText += replaceVal;
        }
        return cipherText;
    }
}

最佳答案

有两种方法可以做到这一点:要么为角色创建正匹配,要么创建负匹配。在正匹配变体中,您首先检查 plainText.charAt(i) 是否是您想要保留的字符,在这种情况下,将其添加到 cipherText >继续循环。

在另一个中,您可以检查是否 indexOf返回 -1 表示字母表不包含该字符。在这种情况下,您会执行相同的操作:添加它并继续。这是我见过的经典凯撒“玩”密码的常用方法:

// introduce a local variable, you don't want to perform charAt twice
char c = plainText.charAt(i);
int charPosition = ALPHABET.indexOf(c);
// if charPositions is -1 then it is not found 
if (charPosition == -1) { // or define a constant NOT_FOUND = -1
    cipherText += c;
    // continue with the for loop
    continue;
}

关于java - 带有空格字符的凯撒密码保持不变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47847852/

相关文章:

java - 尝试对 ListView 使用惰性加载程序时抛出空指针异常

c++ - 如何使用Crypto++并为RSA返回可打印的字节/字符数组?

安卓文件加密

Java sha256 与 Swift sha256 不匹配

c - 不接受用户输入的其他选项

java -/bin/sh :/usr/jdk64/jdk1. 7.0_45/bin/java: 无法执行二进制文件

java - JButton 在 Windows 上显示浅蓝色背景

C中的凯撒密码加密程序

java - 更改 JTextPane EditorKit

javascript - 时髦的解密和加密算法