【发布时间】:2013-03-21 22:46:35
【问题描述】:
我怎样才能使用最多 19 位长的 BigInteger 并使用以下规则对其进行加密:
- 结果只能基于数字和小写英文字母。
- 所有输出必须具有与任何输入相同的长度。长度必须在 11 到 16 个字符之间,具体取决于您的方法,但对于所有可能的输入应该是一致的。
- 没有简单的模式。例如,如果您加密 000...1 和 000...2,结果看起来应该完全不同。
- 完全没有冲突
- 应该能够解密回原来的 BigInteger。
我尝试过的事情
获取原始数字,通过某个键对其进行异或运算,将其乘以一个因子,然后将其转换为 36 进制字符串。该因素的目的是扩大范围,因此不会有太多的 0 填充。该因子必须介于 1 到
36^16/10^19之间。这种方法的问题在于 a) 它不够“安全”,并且 b) 接近的数字具有非常相似的结果。This answer. 但是,结果往往太短或太长,之前使用的因子方法在这里不起作用。
【问题讨论】:
-
这看起来很像家庭作业。是吗?
-
家庭作业怎么样?这个问题的复杂性比大多数家庭作业要困难得多。
-
我说它看起来像家庭作业,主要是针对有限任务的详细说明。
-
我建议将其发布到 crypto.stackexchange.com 而不是 SO。
-
@Guffa 如果这不是家庭作业,我不寒而栗想想它的用途。
标签: c# encryption cryptography biginteger