Java 中所有 UTF-8 字符的维吉尼亚密码

2024-04-20

我有一个简单的函数,用于通过 Java 中的 Vigenère 加密字符串。我省略了解密,因为这只是计算新值的行中的“-”而不是“+”。

但此功能仅适用于普通字母 A-Z。如何更改该函数以使其支持小写字母以及大写字母和所有其他 UTF-8 字符?

public static String vigenere_encrypt(String plaintext, String key) {
    String encryptedText = "";
    for (int i = 0, j = 0; i < plaintext.length(); i++, j++) {
        if (j == key.length()) { j = 0; } // use key again if end reached
        encryptedText += (char) ((plaintext.charAt(i)+key.charAt(j)-130)%26 + 65);
    }
    return encryptedText;
}

非常感谢您的帮助!


好吧,你问了,我觉得很费解,但是打印出密文你就知道你刚才问的是什么了……

public static String vigenereUNICODE(String plaintext, String key, boolean encrypt) {

    final int textSize = plaintext.length();
    final int keySize = key.length();

    final StringBuilder encryptedText = new StringBuilder(textSize);
    for (int i = 0; i < textSize; i++) {
        final int plainNR = plaintext.codePointAt(i);
        final int keyNR = key.codePointAt(i % keySize);

        final long cipherNR;
        if (encrypt) {
            cipherNR = ((long) plainNR + (long) keyNR) & 0xFFFFFFFFL;
        } else {
            cipherNR = ((long) plainNR - (long) keyNR) & 0xFFFFFFFFL;
        }

        encryptedText.appendCodePoint((int) cipherNR);
    }

    return encryptedText.toString();
}

编辑:请不要ever在生产代码中使用,因为我不知道代码点是否确实可以编码/解码。据我所知,并不是所有的点都已被定义,而且标准是一个不断变化的目标。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java 中所有 UTF-8 字符的维吉尼亚密码 的相关文章

随机推荐