关于c#:将Byte [64]数组转换为最小长度字符串

Convert Byte[64] array to minimum length string

我已经尝试生成像XXXX-XXXX-XXXX这样的解锁密钥,或者只是小长度字符串或十六进制字符串。我正在使用RSA算法加密和解密密钥。我有一根很长的绳子

1
Q65g2+uiytyEUW5SFsiI/c5z9NSxyuU2CM1SEly6cAVv9PdTpH81XaWS8lITcaTZ4IjdmINwhHBosvt5kdg==

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

1
Convert.ToBase64String(bytes);

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

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


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

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

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


显然,您只能将一定数量的数据放入固定数量的字符中。基本上已经超出了base64的限制,它为您提供了每字节6位。

因此,您需要减少需要存储的数据量。你能缩短钥匙的长度吗?您可以使用一个96位的密钥(总是让所有其他字节为零)。这需要16个base64字符,这更好。

你似乎不需要太多的安全措施来对付暴力的强迫。因此,您可以进一步减小密钥大小。


既然您提到希望用户能够键入字符串,从用户的角度来看,易用性与字符串长度之间存在负相关。

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

如果用户可以复制粘贴键,那么上面的内容是没有意义的,不应该有任何合理的理由来解释为什么字符串的长度应该尽可能小。