我尝试生成解锁密钥,如XXXX-XXXX-XXXX或只是小长度字符串或Hexstring。我正在使用RSA算法来加密和解密密钥。我有一些很长的字符串
Q65g2+uiytyEUW5SFsiI/c5z9NSxyuU2CM1SEly6cAVv9PdTpH81XaWS8lITcaTZ4IjdmINwhHBosvt5kdg==
当我使用下面的转换方法转换字节数组(数组大小为64字节)时。
Convert.ToBase64String(bytes);
我的要求是生成最小长度的密钥。有没有办法将Byte数组(数组大小为64字节)转换为最小长度,我需要回到字节数组或任何其他建议(以最小化字符串长度)将是有帮助的。
我试图将输出字符串转换为十六进制十进制,但输出太长于字符串。
答案 0 :(得分:1)
您可能需要查看What is the most efficient way to encode an arbitrary GUID into readable ASCII (33-127)?我们讨论了用于压缩PDF文件的Base 85编码。
但是,在你的情况下,Base64和Base85之间的区别是8个字符。
你可以安全地删除Base64字符串中的尾随'=='因为它用于对齐并且总是存在64字节值(当然你必须添加这些字符才能解码字符串)。
答案 1 :(得分:0)
既然你提到你希望用户能够输入字符串, 从用户的观点和字符串的长度之间的易用性之间存在逆相关。
即使键入Base64
字符串也容易出错。 Base32
字符串更容易键入,但相应地长度会增加。
如果用户可以复制粘贴密钥,那么上面的内容没有实际意义,并且不应该有任何有效的理由说明为什么字符串的长度应该尽可能小。
答案 2 :(得分:0)
显然,您只能将一定数量的数据放入固定数量的字符中。你已经基本上已经超出了base64的限制,每个字节有6位。
因此,您需要减少需要存储的数据量。您可以减少密钥长度吗?您可以使用96位密钥(通过始终将所有其他字节保留为零)。这需要16个base64字符,这要好得多。
似乎你不需要太多安全措施来防止暴力破解。因此,您可以进一步减小密钥大小。