Cryptography 如何将消息表示为介于1和n-1之间的整数?

Cryptography 如何将消息表示为介于1和n-1之间的整数?,cryptography,elgamal,Cryptography,Elgamal,我正在尝试实现简单的El Gamal密码系统 我无法理解如何将消息表示为介于1和n-1之间的整数。 我唯一想到的是: 如果n位长度为k,则将输入消息m除以t | t

我正在尝试实现简单的El Gamal密码系统

我无法理解如何将消息表示为介于1和n-1之间的整数。 我唯一想到的是: 如果n位长度为k,则将输入消息m除以t | t 我认为这是错误的


那么,如何将消息表示为介于1和n-1之间的整数呢

您可以这样做,这基本上相当于在分组密码中使用,但有针对这一点的攻击。攻击者可能会对密文的不同块进行重新排序,您可以毫无问题地对其进行解密,但收到的明文将在您不知道的情况下被破坏。这也可能为重播攻击打开大门,因为这些块都是独立加密的。您需要某种经过身份验证的加密

回到你原来的问题。这种问题通常通过使用混合加密来解决。类似AES的分组密码用于使用随机密钥加密整个明文。该随机密钥依次通过ElGamal加密,因为该密钥足够小,可以用 现在,根据分组密码的操作模式,这仍然是可延展的。您可能需要在随机密钥旁边放置密文/明文的散列作为完整性检查。或者使用经过身份验证的操作模式(如GCM),并在随机密钥旁边添加生成的标记。根据k,这应该合适


请注意,如果未达到k,您应该为
随机密钥|散列/标记
使用某种填充。

滚动您自己的加密通常不是一个好主意,但我怀疑这是为了(自我)研究。这是与crypto.SE交叉发布的: