php加密一个非常大的数字以产生一个较小的数字
Posted
技术标签:
【中文标题】php加密一个非常大的数字以产生一个较小的数字【英文标题】:php encrypt a very large number to produce a smaller number 【发布时间】: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 - 但它包含字母,因此我无法执行涉及该数字的算术函数
【参考方案1】:
你说的是“压缩”,而不是“加密”。
如果有的话,加密很可能会产生一个比其输入更大的字符串。虽然您可以压缩该数字,但节省的费用非常小。
根据可能值的范围,您可以简单地构建一个包含每个可能的大数字的数组,并使用数组索引而不是数字本身。
【讨论】:
【参考方案2】:您可以将数字转换为更高的基数以用更少的字符表示它。例如,如果您的数字以 10 为底,请将其转换为以 16 为底。您可以使用 GMP 库对这些不在以 10 为底的数字进行高精度数学运算。
您可以在此处阅读有关 GMP(Gnu 多精度)库的信息:http://www.php.net/manual/en/book.gmp.php
【讨论】:
以上是关于php加密一个非常大的数字以产生一个较小的数字的主要内容,如果未能解决你的问题,请参考以下文章