caw*_*caw 3 java encryption cryptography vigenere
我有一个简单的函数,用于通过 Java 中的 Vigen\xc3\xa8re 加密字符串。我省略了解密,因为这只是计算新值的行中的“-”而不是“+”。
\n\n但此功能仅适用于普通字母AZ。如何更改该函数以使其支持小写字母以及大写字母和所有其他 UTF-8 字符?
\n\npublic static String vigenere_encrypt(String plaintext, String key) {\n String encryptedText = "";\n for (int i = 0, j = 0; i < plaintext.length(); i++, j++) {\n if (j == key.length()) { j = 0; } // use key again if end reached\n encryptedText += (char) ((plaintext.charAt(i)+key.charAt(j)-130)%26 + 65);\n }\n return encryptedText;\n}\nRun Code Online (Sandbox Code Playgroud)\n\n非常感谢您的帮助!
\n好吧,你问了,我觉得很费解,但是打印出密文你就知道你刚才问的是什么了……
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();
}
Run Code Online (Sandbox Code Playgroud)
编辑:请不要在生产代码中使用,因为我不知道代码点是否确实可以编码/解码。据我所知,并不是所有的点都已被定义,而且标准是一个不断变化的目标。