2

我尝试生成像 XXXX-XXXX-XXXX 这样的解锁密钥或简单的小长度字符串或十六进制字符串。我正在使用 RSA 算法来加密和解密密钥。我有一些长字符串

Q65g2+uiytyEUW5SFsiI/c5z9NSxyuU2CM1SEly6cAVv9PdTpH81XaWS8lITcaTZ4IjdmINwhHBosvt5kdg==

当我使用以下转换方法转换字节数组(数组大小为 64 字节)时。

Convert.ToBase64String(bytes); 

我的要求是生成最小长度的密钥。有什么方法可以将字节数组(数组大小为 64 字节)转换为最小长度,我需要将其转换回字节数组或任何其他建议(以最小化字符串长度)会有所帮助。

我试图将输出字符串转换为十六进制十进制,但输出比字符串太长。

4

3 回答 3

1

您可能想看看将任意 GUID 编码为可读 ASCII (33-127) 的最有效方法是什么?那里讨论了用于压缩 PDF 文件的 Base 85 编码。

不过,在您的情况下,Base64 和 Base85 之间的区别是 8 个字符。

您可以安全地删除 Base64 字符串中的尾随 '==',因为它用于对齐并且对于 64 字节值将始终存在(当然,您必须将这些字符添加回解码字符串)。

于 2012-08-08T11:01:23.870 回答
0

Obviously, you can only fit a certain amount of data into a fixed number of characters. You have pretty much maxed out the limit with base64 already which gives you 6 bits per byte.

Therefore you need to reduce the amount of data that needs to be stored. Can you reduce the key length? You could use a 96 bit key (by always leaving all other bytes zero). That would require 16 base64 characters which is much better.

It seems you don't need much security against brute forcing. So you can reduce the key size even further.

于 2012-08-08T10:21:29.677 回答
0

既然您提到您希望用户能够输入字符串,那么从用户的角度来看,易用性与 string 的长度之间将存在反比关系

即使键入一个Base64字符串也容易出现很多错误。Base32字符串更容易输入,但相应的长度会增加。

如果用户可以复制粘贴密钥,那么上面的内容没有实际意义,应该没有任何正当理由为什么字符串的长度应该尽可能小。

于 2012-08-08T10:00:20.820 回答