这可能不属于这里所以如果我需要在其他地方问这个,请告诉我。
假设我们有10032(将是X)和154(将是Y)作为输入,我需要的是得到1 int作为输出。该输出也需要长度为4或5。
随着输出和X或Y知道,我需要阻止任何人发现公式。这是Y将保持不变但X经常变化的情况。
我正在读哈希,但我不确定哪一个对我最好。或者如果一个简单的数学公式可以完成这项工作。在程序中,我们目前使用以下方式使用它:X + Y * 2/3然后舍入到较低的数字。
该解决方案还需要非常少量的碰撞。
谢谢
我假设一种最小化碰撞的好方法是在对两个数字执行的任何操作之后使用模数10 ^ 6。
最难的部分是原始的int之间的操作,但查找关于哈希的理论,我相信你可以找到很好的建议。
为了使其真正难以反转,您可以分几个阶段执行操作,每个阶段都取决于前一个阶段的结果。只是一个想法......
对于这个问题,你可能在Cryptography Stack Exchange有更好的运气,但这里有一些想法。
考虑到这些事情,最简单的想法可能是像奥斯卡提到的那样的基本模块化环。对于您的模数,您应该选择最大的素数和您想要保留的位数。例如,如果您想要一个5位数的结果,请使用99,877。或者如果你想避免碰撞并使用9位数字,你可以使用999,999,733。您可以使用prime list查找用于模数的素数。
十进制d =(X * Y) - (反向X *反向Y); (当我说反向10032将是23001)
如果有更多,请取前4或5位数字。
或者你可以创建一个如下所示的字符串:10032154然后使用哈希方法,然后取前4或5位数? (你也可以反转这个字符串是:45123001)
顺便说一句你为什么需要拿4号或5号数字呢?减少数字量将导致共谋的可能性增加。