我们的PIN码需要加密,纯粹是随机的,用户无法选择。
它们必须通过带宽是真正问题的连接在第三世界国家发送。所以我们不想发送256字节的加密数据。大多数加密算法都是针对具有大量模式的自然语言设计的,因此算法试图模糊这些模式。我们需要更简单但仍然标准的东西。
E.g。
密码:1234
key:'任何长度的密钥'
示例密文:7301
XOR是一个问题,因为任何拥有两个PIN码和相应密文的人都可以猜出密钥。
我们可以使用什么算法?我们正在寻找Python实现。
抱歉我不清楚;
答案 0 :(得分:1)
根据你所写的内容,你显然没有很好地研究这个话题......我建议这样做,和让某人知道他/她在做什么。
简单地寻找python实现并不能解决你的问题。
加密只是不能以这种方式安全地实施到任何项目中。
但是......如果您有一些值(如序列号,帐号)可能会用作每个PIN的密钥派生(因此每个引脚都有不同),流密码可能适合您的场景...
我写可能因为没有其他信息并仔细查看您的项目就无法分辨
所以请将此视为可能适合的解决方案,但不保证是合适的
所以你要做的是:像PBKDF这样的功能提供静态密钥,每个PIN值,以获得每个引脚的唯一密钥
将该密钥输入到像RC4这样的流密码中,并从密码输出中删除一个方便的字节数,就像RC4的前256字节一样(简单地将它们扔掉,对密码进行一些可能的攻击有点难度) )...
现在接受下一个14位密码输出,并将它们与您的PIN相对应,视为数字
结果数字将在0到16384之间
如果所需范围必须为0000至9999,
将14位输出视为一个数字,只需将其添加到您的PIN模数10000
要取回您的PIN码,再次计算该14位值,从密文中减去它,添加20000模数10000以弥补负值,并且您有PIN码
作为旁注......你真的不需要流密码,因为你已经可以使用PBKDF的输出,因为你的纯文本真的很小......但是PBKDF意味着派生一个密钥。 ..不是一个密码本身
答案 1 :(得分:0)
另一种答案:Hasty Pudding cipher可以加密您想要的任何数字范围。你可以设置一个Hasty Pudding实现来加密[0000,9999]到[0000,9999]。