我正在寻找一种非对称密码,它具有非常短的输入导致输出非常短的特性。
.NET的标准RSACryptoService
似乎为任何短明文输出至少128个字节,包括空明文。支持的最小BlockSize为128,唯一支持的模式为CBC。
完美的算法根本不会扩展明文,同时提供不对称属性。预期的输入大小为50-100字节,当然不会超过150。
答案 0 :(得分:4)
使用椭圆曲线ElGamal encryption和变体,当然可以实现您感兴趣的尺寸目标。 Bouncycastle C# library是实施的一种选择。
因此,例如,通过使用NIST P-256曲线,您可以加密32字节的数据并获得64字节的结果。如果使用正确的填充,则可以加密较少的数据。我相信PGP曾经考虑过实施这个,但我不知道他们是否曾经这样做过。
答案 1 :(得分:1)
非对称密码需要长密钥,因为有许多非常强大的技术可以缩小密钥空间和输入空间。如果通过看到您发送了一条简短的加密消息,我知道明文也很短,那么进一步缩小了输入空间。 因此,如果存在这样的密码,那么根据定义发送短消息是不安全的。
答案 2 :(得分:1)
非对称密码非常慢。在实践中,除了最小的输入之外,在任何其他方面都无法使用。然而,对称密码可以非常快。
使用非对称密码的技术如下:
S
AES-256-CBC
)和密钥S
S
)和密钥RSA
加密密钥A
S
添加到加密邮件换句话说,使用对称算法使用随机密钥对消息进行加密,然后使用非对称算法使用其中一个密钥对随机密钥进行加密。
您还必须考虑CBC模式的IV和填充,并且您必须考虑RSA的填充。它加起来。完美的算法需要IV和填充。鉴于你有一个IV,两个填充,以及随机对称密钥(加密)与消息(加密)一起存储,加密的东西将不得不占用空间。
答案 3 :(得分:-1)
我认为你不能得到明显小于密钥大小的密文,而非对称加密算法的密钥可能应该是几百到几千比特。你能不能将多个东西组合在一起并加密更大的块?