Encryption 用于生成URL安全密文而不进行编码的密码

Encryption 用于生成URL安全密文而不进行编码的密码,encryption,cryptography,Encryption,Cryptography,我想加密小型序列化数据结构(~256字节),以便安全地传递它们(尤其是在URL中)。我目前的方法是使用对称分组密码,然后对密码文本进行base64编码,然后使用URL编码。这会产生一个编码的密码文本,它(毫不奇怪)比原始数据结构长一点。这些编码密码的长度有点易用性问题;理想情况下,我希望密码文本与输入文本的长度大致相同 是否有可以配置为将输出字节的值限制在URL安全范围内的分组密码?我想,如果有,就会有一个安全权衡 URL编码不会显著扩展base64编码的字符串,因为64个字符中有62个不需要修

我想加密小型序列化数据结构(~256字节),以便安全地传递它们(尤其是在URL中)。我目前的方法是使用对称分组密码,然后对密码文本进行base64编码,然后使用URL编码。这会产生一个编码的密码文本,它(毫不奇怪)比原始数据结构长一点。这些编码密码的长度有点易用性问题;理想情况下,我希望密码文本与输入文本的长度大致相同


是否有可以配置为将输出字节的值限制在URL安全范围内的分组密码?我想,如果有,就会有一个安全权衡

URL编码不会显著扩展base64编码的字符串,因为64个字符中有62个不需要修改。但是,您可以使用来做得更好一点。这种编码使用'-'和'.'字符来代替'+'和'/'字符,从而略微提高了效率


密码本身不会导致任何显著的数据扩展。它会将数据填充为块长度的倍数,但这在您的情况下并不重要。您可以尝试在加密之前压缩输入。256字节并不多,但您可能会看到一些改进。

如果您的数据结构为256字节长,则使用8字节的分组密码对其进行加密会将其增加到8字节(取决于具体的输入长度)

因此,在应用base64之前,您最多有264个字节,而base64编码最多可增加352个字节

因此,正如您所看到的,base64编码产生了最大的开销。有一些更有效的编码,比如base91,但它们非常少见


如果大小很重要,我建议在加密数据之前对其进行压缩。

对于给定的密钥K,密码必须为每个明文生成不同的密文。如果消息空间为256字节,则密码必须能够生成至少256^256条不同的消息。这将需要至少256个字节,而输出字母表大小的任何缩减都需要更长的消息

如您所见,您可以在之后进行一些编码以避免某些输出符号,但代价是增加长度。此外,如果编码是加密算法的一部分,您将支付相同的成本。这就是为什么这不是任何加密算法的特征


正如其他人所提到的,唯一真正的答案是减少加密数据的大小,从而减少对数据的编码。(要么将数据放在url中,要么不将数据放在url中,例如将数据存储在数据库中,并在url中放置唯一id)。所以压缩>加密>编码。

这正是我要建议的。将数据存储在服务器端,并传递一个散列令牌,比如识别数据库中记录的sha1散列。然后,您只需要处理40个不需要base64编码或urlencoded的字母数字字符,您可以通过轻松、安全、安全地将数据从自己的服务器中取出来引用数据,而无需向每个网站访问者公开您的编码数据,要求黑客尝试破坏您的加密并破坏您的网站。