如何压缩随机字符串?

Sey*_*ams 1 .net c# compression string

我正在研究一种基于RSA非对称算法的加密器应用程序.它生成一个密钥对,用户必须保留它.由于密钥对是长随机字符串,我想创建一个函数,让我根据模式压缩生成的长随机字符串(密钥对).

(例如,函数获取包含100个字符的字符串并返回包含30个字符的字符串)

因此,当用户输入压缩字符串时,我可以根据我压缩的模式重新生成密钥对.

但有人告诉我,压缩随机的东西是不可能的,因为它们是随机的!

你有什么想法 ?有没有办法做到这一点?

谢谢

Tim*_* S. 6

压缩(几乎任何)随机数据是不可能的.学习一点信息理论,熵,压缩如何工作以及鸽子原理将使这一点非常清楚.

这个规则的一个例外是,如果用"随机字符串"表示"以可压缩形式表示的随机数据,如十六进制".在这种情况下,您可以压缩字符串或(更好的选项)简单地将字节编码为基数64而不是使其更短.例如

// base 16, 50 random bytes (length 100)
be01a140ac0e6f560b1f0e4a9e5ab00ef73397a1fe25c7ea0026b47c213c863f88256a0c2b545463116276583401598a0c36
// base 64, same 50 random bytes (length 68)
vgGhQKwOb1YLHw5KnlqwDvczl6H+JcfqACa0fCE8hj+IJWoMK1RUYxFidlg0AVmKDDY=
Run Code Online (Sandbox Code Playgroud)

您可能会为用户提供较短的哈希值或指纹值(例如最后x个字节).然后通过存储完整的密钥和哈希值,你可以在他们给你哈希时给他们密钥.你必须让这个哈希足够长,以免安全性受到损害.根据您的应用程序,这可能会破坏目的,因为哈希必须与密钥一样长,否则可能不是问题.