【发布时间】:2014-03-20 23:22:18
【问题描述】:
我正在开发一个基于 RSA 非对称算法的加密器应用程序。 它生成一个密钥对,用户必须保留它。 由于密钥对是长随机字符串,我想创建一个函数,让我根据模式压缩生成的长随机字符串(密钥对)。
(例如函数获取一个包含100个字符的字符串,返回一个包含30个字符的字符串)
所以当用户输入压缩字符串时,我可以根据我压缩的模式重新生成密钥对。
但是有人告诉我,不可能压缩随机的东西,因为它们是随机的!
你的想法是什么? 有什么办法吗?
谢谢
【问题讨论】:
-
那个人是对的。您应该阅读信息论和熵。
-
好吧,如果它是随机的,那么你就有一个随机的机会来压缩它!
-
最简单的答案是尝试压缩它们,看看你得到了什么,看看它是否足够好。需要注意的是,压缩算法通常产生二进制输出而不是字符串。您可以使用 BASE64 编码将二进制转换为字符串,但这会导致 25% (IIRC) 的通货膨胀损失。你仍然可能会得到更短的字符串 - 取决于它的内容。
-
我不是密码学方面的专家,但您尝试做的是将压缩从 100 个字符的密钥变为 30 个字符的密钥。如果您依赖攻击者不知道您的“功能”,那么这将永远不会起作用:en.wikipedia.org/wiki/Security_through_obscurity
-
有些数据是可压缩的,有些则不是。您不能期望每次都有一定程度的压缩。
标签: c# .net string compression