我想使用 ASCII (Z=90) 加密字母“Z”,使用带有两个数字的密钥:(17, 3233)
RSA: 90^17 mod3233 = 1668
我想知道是否有任何方法可以将这封信加密为字符值。
RSA 不是流密码。加密结果始终具有模数的大小(位) - 在您的情况下为 3233。
数字 3233 需要 12 位 - 然而一个字节/字符仅提供 8 位。因此,您无法将 RSA 加密文本打包为一个字节发送。您至少需要 2 个字节。
是否可以将整数打包在 char 中取决于您对 char 的定义:
可打印的 ASCII 字符通常有 7 位。你不能用 7 位来存储 12 位。
一个标准字符相当于一个字节,可以存储8位。你不能用 8 位来存储 12 位。
考虑到 Java
char
是一个 UTF-16 字符,您可以将整数保存为一个字符,但是将二进制数据存储在 Java UTF-16 char
中是一种非常不干净和黑客的解决方案。 我强烈建议不要实现这个! 如果没有适当的转换和编码(例如十六进制编码的base64),二进制数据不应保存在字符(数组)中。
所有有符号字符值的范围从 -128 到 127。所有无符号字符值的范围从 0 到 255。因此唯一的方法是将这些数字置于该范围内。