【发布时间】:2015-08-11 18:43:03
【问题描述】:
嗨,是否可以用我想要的特定长度加密字符串?例如:我想将此字符串 BI000001 加密为十六进制值 A3D5F2ARD3(random) 将其固定为 10 长度。所以当用户输入这个值A3D5F2ARD3时,系统会根据这个值解密得到BI000001的值。
在java中可以做到这一点吗?
我尝试了很多方法,但所有加密长度都太长了。
【问题讨论】:
-
为什么加密数据与未加密数据的长度相同很重要?
-
十六进制值比您的纯文本短(假设二进制编码)。所以不,那是不可能的。
-
在 10 个字符/字节的限制下,需要什么样的密文编码?你的明文有多长,你允许哪些字符集?
-
任何集合中的信息密度都有限制。压缩算法旨在在合理范围内最大化该密度。加密算法不是。通常,一组加密的数据将包含与带有填充的纯文本一样多的字节。如果您希望密文小于纯文本,请在加密前压缩纯文本。压缩到一个小的固定长度是不可能的。你可以散列到一个固定的小长度,但散列是不可逆的。
-
看来您需要保留格式的加密。有些算法是专利的,所以要小心你的实现。如果您没有那么安全意识,您可以使用像 Vigènere 这样的经典密码,并使用足够大的字母表。
标签: java encryption