我有一个简单的函数,用于通过 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(使用前将#替换为@)