RSA on ASCII 消息问题与'\0'
RSA on ASCII message problems with '\0'
我想使用用汇编编写的 RSA 算法加密和解密 ASCII 消息。
我读到出于安全和效率的原因,加密通常不是按字符调用的,而是将许多字符分组并加密在一起(例如维基百科说 3 个字符被分组)。
让我们假设我们想要加密消息 "aaa" 分组 2 个字符。
"aaa" 存储为 61616100。
如果我们将两个字符分组并加密生成的半字,则 6161 块的结果实际上可能类似于 0053。这将导致人为的第二个“\0”字符损坏生成的消息。
有什么办法可以解决这个问题?
不幸的是,使用填充或类似的东西不是一种选择,因为我需要使用相同的函数来加密和解密。
RSA的输出是一个数字。通常这个数字被编码为八位字节串(或字节数组)。您不应将结果视为字符串。您需要将其视为一个字节数组 ,其长度与模数 相同(或者至少是模数的字节长度)。
除了包含零(空终止符)的结果外,字符可以具有任何值,包括不可打印的字符,例如控制字符和 7F
。如果要将结果视为可打印字符串,请转换为十六进制或 base64。
我想使用用汇编编写的 RSA 算法加密和解密 ASCII 消息。 我读到出于安全和效率的原因,加密通常不是按字符调用的,而是将许多字符分组并加密在一起(例如维基百科说 3 个字符被分组)。 让我们假设我们想要加密消息 "aaa" 分组 2 个字符。 "aaa" 存储为 61616100。 如果我们将两个字符分组并加密生成的半字,则 6161 块的结果实际上可能类似于 0053。这将导致人为的第二个“\0”字符损坏生成的消息。 有什么办法可以解决这个问题? 不幸的是,使用填充或类似的东西不是一种选择,因为我需要使用相同的函数来加密和解密。
RSA的输出是一个数字。通常这个数字被编码为八位字节串(或字节数组)。您不应将结果视为字符串。您需要将其视为一个字节数组 ,其长度与模数 相同(或者至少是模数的字节长度)。
除了包含零(空终止符)的结果外,字符可以具有任何值,包括不可打印的字符,例如控制字符和 7F
。如果要将结果视为可打印字符串,请转换为十六进制或 base64。