使用RSA算法对信件进行加密
encryption of a letter with RSA algorithm
我得到了 (17,3233),我需要使用 ascii 码对字母 'Z' 进行加密。 (Z = 90)
90^17 mod3233 = 1668 就可以了。但是我想知道是否有一种方法可以只发送一个字符而不是整数 1668 并且仍然可以正常工作。
所有有符号字符值的范围从 -128 到 127。所有无符号字符值的范围从 0 到 255。所以唯一的方法是让这些数字在该范围内。
RSA 不是流密码。加密结果始终具有模数的大小(位)- 在您的情况下为 3233。
数字 3233 需要 12 位 - 然而一个 byte/character 只提供 8 位。因此,您不能将 RSA 加密文本打包为一个字节。您至少需要 2 个字节。
是否可以将整数打包到一个字符中取决于您对字符的定义:
char =(可打印)ASCII 字符
一个可打印的ASCII字符通常有7位。你不能在 7 位中存储 12 位。
字符=字节
一个标准字符相当于一个字节,可以存储8位。你不能在 8 位中存储 12 位。
char = Java UTF-16 字符
考虑到 Java char
是一个 UTF-16 字符,您可以将整数保存为一个字符,但是将二进制数据存储在 Java UTF-16 中char
是一个非常不干净和骇人听闻的解决方案。 我强烈建议不要实现这个!二进制数据不应该在没有适当转换和编码(例如十六进制编码的base64)的情况下保存在字符(数组)中。
我得到了 (17,3233),我需要使用 ascii 码对字母 'Z' 进行加密。 (Z = 90) 90^17 mod3233 = 1668 就可以了。但是我想知道是否有一种方法可以只发送一个字符而不是整数 1668 并且仍然可以正常工作。
所有有符号字符值的范围从 -128 到 127。所有无符号字符值的范围从 0 到 255。所以唯一的方法是让这些数字在该范围内。
RSA 不是流密码。加密结果始终具有模数的大小(位)- 在您的情况下为 3233。
数字 3233 需要 12 位 - 然而一个 byte/character 只提供 8 位。因此,您不能将 RSA 加密文本打包为一个字节。您至少需要 2 个字节。
是否可以将整数打包到一个字符中取决于您对字符的定义:
char =(可打印)ASCII 字符
一个可打印的ASCII字符通常有7位。你不能在 7 位中存储 12 位。
字符=字节
一个标准字符相当于一个字节,可以存储8位。你不能在 8 位中存储 12 位。
char = Java UTF-16 字符
考虑到 Java char
是一个 UTF-16 字符,您可以将整数保存为一个字符,但是将二进制数据存储在 Java UTF-16 中char
是一个非常不干净和骇人听闻的解决方案。 我强烈建议不要实现这个!二进制数据不应该在没有适当转换和编码(例如十六进制编码的base64)的情况下保存在字符(数组)中。