【发布时间】:2019-02-07 22:46:24
【问题描述】:
所以我正在尝试使用仿射密码加密消息。我想使用所有 128 个 ASCII 字符来完成它。当涉及到特定字母 Q、R、S、T 和 U 时,我收到错误消息。它们没有正确转换回来并显示不正确的解密。有什么想法吗?
加密消息
RUX[^adgjmpsvy|
解密消息
ABCDEFGHIJKLMNOP/.-,+VWXYZ
我的代码;
public class EncryptionProject {
public static void main(String[] args) {
StringBuilder s = new StringBuilder("ABCDEFGHIJKLMNOPQRSTUVWXYZ");
System.out.println("Encrypted Message");
StringBuilder encryptedMessage = affineEncryption(s);
System.out.print(encryptedMessage);
System.out.println("\nDecrypted Message");
StringBuilder decryptedMessage = affineDecryption(encryptedMessage);
System.out.print(decryptedMessage);
}
/* use affine cipher to encrypt message */
public static StringBuilder affineEncryption(StringBuilder s) {
StringBuilder encryption = new StringBuilder();
final int A = 3, B = 15, M = 128; // a * p + b (mod m)
/* loop through string and compute affine cipher */
for (int i = 0; i < s.length(); i++) {
encryption.append((char)((A * s.charAt(i) + B) % M));
}
return encryption;
}
/* decryption method */
public static StringBuilder affineDecryption(StringBuilder s) {
final int A = 43, B = 15, M = 128;
StringBuilder decryption = new StringBuilder();
/* loop through and undo affine cipher using inverse of A */
for (int i = 0; i < s.length(); i++) {
decryption.append((char)((A * Math.abs((s.charAt(i) - B))) % M));
}
return decryption;
}
}
【问题讨论】:
-
您很幸运,因为您的函数在您感兴趣的 UTF-16 代码单元 (
char) 值的子集上封闭,并且这些代码单元单独使用(相对于有序对, 例如 ????) 来表示该范围内的 Unicode 代码点 (C0 Controls and Basic Latin)。
标签: java encryption ascii stringbuilder