【问题标题】:php encrypt a very large number to produce a smaller numberphp加密一个非常大的数字以产生一个较小的数字
【发布时间】:2012-11-05 13:02:20
【问题描述】:

我正在处理非常大的数字。我的一种算法要求数字“x”小于另一个数字“n”,以便执行该算法。我想知道是否可以加密非常大的数字以产生较小的数字并存储密钥,以便我需要将数字解密回更大的数字?我看过 mcrypt 但它并没有输出所有数字,从我所看到的它输出一个字符串。

【问题讨论】:

  • 字符串与一个非常大的数字并没有太大区别(以 256 为基数编写)
  • 如果您还不知道,请阅读pigeonhole principle。它是否使这成为不可能,或者对那些使这成为可能的“非常大的数字”(例如max(large) - min(large_numbers) < n)有限制?
  • @Vlad 对于简单的以 128 为基数的 ASCII 字符
  • 另外,小于是什么意思?您的意思是比数字比较意义上的小,还是比使用的存储空间小?例如,如果源是整数并且浮点是可接受的目标,则可以实现此目的;那么你可以只划分数字。例如,100 可以通过除以 10 或 100 或 1000 等来压缩...
  • @Vlad - 但它包含字母,因此我无法执行涉及该数字的算术函数

标签: php math encryption mcrypt


【解决方案1】:

你说的是“压缩”,而不是“加密”。

如果有的话,加密很可能会产生一个比其输入更大的字符串。虽然您可以压缩该数字,但节省的费用非常小。

根据可能值的范围,您可以简单地构建一个包含每个可能的大数字的数组,并使用数组索引而不是数字本身。

【讨论】:

    【解决方案2】:

    您可以将数字转换为更高的基数以用更少的字符表示它。例如,如果您的数字以 10 为底,请将其转换为以 16 为底。您可以使用 GMP 库对这些不在以 10 为底的数字进行高精度数学运算。

    您可以在此处阅读有关 GMP(Gnu 多精度)库的信息:http://www.php.net/manual/en/book.gmp.php

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多