Algorithm 需要一个数学算法将大整数中的数字编码为整数

Algorithm 需要一个数学算法将大整数中的数字编码为整数,algorithm,math,integer,encode,Algorithm,Math,Integer,Encode,我想将100位数的数值转换为小于10位数的数值,反之亦然。 所以我把那个编码后的号码传给手机用户,当我回来的时候,我就可以再发一个100位数的号码了。 我想在PHP、.NET或JS中使用它 但在此之前,我需要一个算法 我有一些想法使用简单的除法减法和加法乘法选项来实现。但是需要更安全的。如果100位数字中有超过10000个不同的可能值,则不可能将其映射到10位数字并可靠地映射回原始数字。100位数字,我假设这是一个以10为基数的数字,在计算机上谈论数字时,“数字”几乎毫无意义 如果你实际上指的是

我想将100位数的数值转换为小于10位数的数值,反之亦然。 所以我把那个编码后的号码传给手机用户,当我回来的时候,我就可以再发一个100位数的号码了。 我想在PHP、.NET或JS中使用它

但在此之前,我需要一个算法


我有一些想法使用简单的除法减法和加法乘法选项来实现。但是需要更安全的。

如果100位数字中有超过10000个不同的可能值,则不可能将其映射到10位数字并可靠地映射回原始数字。

100位数字,我假设这是一个以10为基数的数字,在计算机上谈论数字时,“数字”几乎毫无意义

如果你实际上指的是一个100位的整数,那么这将很难适应一个64位的整数范围+/-9223372036854775808,那么你的问题的措辞就不那么恰当了。再多的压缩或编码也不能让您使用不超过10位的数据来表示100位

如果您的意思是以10为基数的100个数字,那么您正在处理bignum,因此可能应该将它们视为字节并使用bignum库

100个以10为基数的数字仍然小于512位。

假设100位数字是以10为基数的数字,那么如果我的数学没有错,那么您将需要10个以100为基数的数字来表示相同的数字。因此,除了使用0-9之间的字符外,您还需要扩展字符以包括其他字形,包括大写和小写字母等,以完成100个字符的字母表。好吧,我的数学是错的,所以不要理会这个,但是请考虑下一段。< /P>
另一个想法是使用散列算法从100位数字中导出10字节的散列,并将其用作服务器端数据库散列表中的键。无需编码/解码,只需将密钥发送给移动客户端,移动客户端使用密钥从服务器获取100位数字。

您所要求的是不可能的。您正在尝试将10^100个项目放入10^10个框中。有些盒子会有多个物品,所以不可能反转回原来的物品

您可以将100位10进制数字编码为56位62进制数字,使用大小写罗马字母和数字0-9。这里的数学是100*log10/log62


要使用某些字母表中少于10个字符进行编码,您需要一个包含~2^34个符号的字母表。这里的数学是100*log10/lognumber个符号。祝你好运。

安全吗?那么你是说实际上是加密,而不是编码?当然,这是不可能的,因为每10位数字有很多100位数字。对于大整数可以是什么有严格的限制吗?我们可以使用多个10位整数吗?你能传递10位还是10字节?有10100个可能的100位数字,只有109个少于10位的数字,所以如果你想压缩任何100位数字,原则上是不可能的。你想做什么?这听起来一点也不像数学。你能解释一下简单的除法减法和加法乘法选项吗?我认为不可能将100位数字压缩到10位而不丢失一些数据…@tom,不是吗?我在句子中间慌乱了:直觉上很明显,要将10位十进制数字编码成1=100->10,你的字母表中需要1000000000个符号。我只能使用0-9位整数。我要加密这个号码。通过服务器将它传递给移动应用程序,所以我需要对它进行加密。同样在响应中,我也需要在解密模式下使用它。@Shail Patel:由于您只能使用数字0-9的限制,您的问题无法解决。以10为基数的100个数字只能代表以20为基数的10个数字。您需要10个基数10^10位数。