encryption - 模糊/加密一个订单号作为另一个数字 : symmetrical, "random"外观?

标签 encryption random encoding numbers

客户有一个简单的递增顺序号(1、2、3...)。他希望最终用户收到一个 8 位或 9 位(仅限数字——无字符)“随机”数字。显然,这个“随机”数实际上必须是唯一且可逆的(它实际上是对实际订单号的加密)。

我的第一个想法是洗牌一些位。当我向客户展示样本序列时,他提示随后的 obfuscOrderNumbers 一直在增加,直到它们达到“洗牌”点(低位开始发挥作用的点)。他希望 obfuscOrderNumbers 看起来尽可能随机。

我的下一个想法是确定性地为线性同余伪随机数生成器设置种子,然后获取 actualOrderNumber th 值。但在那种情况下,我需要担心冲突——客户想要一种保证在至少 10^7 个周期内不会发生冲突的算法。

我的第三个想法是“嗯,只是加密该死的东西”,但是如果我使用股票加密库,我必须对其进行后处理才能获得仅 8 或 9 位数字的要求。

我的第四个想法是将 actualOrderNumber 的位解释为一个格雷编码的整数并返回它。

我的第五个想法是:“我可能想多了。我敢打赌 StackOverflow 上的某个人可以用几行代码做到这一点。”

最佳答案

随机选择一个 8 位或 9 位数字,比如 839712541。然后,取您订单号的二进制表示(在本例中,我没有使用 2 的补码),将其填充为相同的位数 (30),然后将其反转, 和 xor 翻转的订单号和魔数(Magic Number)。例如:

1         = 000000000000000000000000000001

Flip      = 100000000000000000000000000000
839712541 = 110010000011001111111100011101
XOR       = 010010000011001111111100011101 = 302841629

2         = 000000000000000000000000000010

Flip      = 010000000000000000000000000000
839712541 = 110010000011001111111100011101
XOR       = 100010000011001111111100011101 = 571277085

要取回订单号,请将输出编号与您的魔数(Magic Number)进行异或,转换为位字符串,然后反转。

关于encryption - 模糊/加密一个订单号作为另一个数字 : symmetrical, "random"外观?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/611915/

相关文章:

c++ - 现实程序中来自 c++ <random> 库的随机数生成器

python - 获取 python 文件或环境的 CURRENT_FILE_ENCODING

c - 如何使用 C 在 Linux 中播放音调?

linux - 查找文本文件的编码

java - parseJSON 将在有效 JSON 上抛出错误

iphone - 加密和签名创建

algorithm - 当我输入错误的密码时会发生什么?

java - 如何在 Java 中使用 3DES 加密/解密?

尝试使用 libtomcrypt 库(rsa 公钥生成)时,Contiki mote 类型创建错误

random - 从表中设置表随机值