将一个PIN码(4个纯随机数字)加密成相同的密码tex的算法

2024-03-28 21:35:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我们有需要加密的PIN码,这是完全随机的,用户无法选择。在

它们必须通过连接发送到第三世界国家,在那里带宽是一个真正的问题。所以我们不想发送256字节的加密数据。大多数加密算法都是为自然语言设计的,因为自然语言中有很多模式,所以算法试图掩盖这些模式。我们需要更简单但仍然标准的东西。在

例如

PIN码:1234

key:'任意长度的密钥'

密码文本示例:7301

XOR是一个问题,因为任何人只要有两个PIN码和相应的密码文本就可以猜出密钥。在

我们可以使用什么算法?我们正在寻找的是Python实现。在

编辑:

对不起,我不清楚

  • 我们正在寻找对称加密。我们的目标是保护别针不容易被我们的员工发现。在
  • 带宽是个问题。一个现实的例子:我们可能需要通过GPRS发送500000张卡的数据。例如,如果填充的密码文本为每张卡增加256个字节,则需要额外5个小时才能下载。因此,我们正在寻找短密码文本。在
  • “大多数加密算法都是为自然语言设计的”->;是的,这不是真的,但是,我想说的是,大多数流行的加密算法都假设明文不是随机的,这与我们的情况不符。另外,我看到的所有代码都产生了块输出,其中每个块都有特定数量的字节,因此短明文的长度并不明显。我们不需要这个,每个人都知道大多数PIN是4位数。在
  • “Python implementation”->;只是意味着我们希望能够在Python中使用它,也就是说,存在一个针对它的包。在

Tags: 数据key用户文本gt算法密码示例
2条回答

另一个答案是:Hasty Pudding cipher可以加密任意范围的数字。您可以设置一个草率的布丁实现,从[0000,9999]加密到[0000,9999]。在

从你写的来看,你显然没有很好地研究这个话题。。。我建议这样做,找一个知道他/她在做什么的人。在

仅仅寻找python实现并不能解决您的问题。在

简单地,加密不可能以这种方式安全地实现到任何项目中。在

但是。。。如果您有一些值(如序列号、帐号)可以用作每个PIN的密钥派生(因此每个PIN都是不同的),那么流密码可能适合您的场景。。。在

我写可能,因为没有额外的信息和对你的项目的仔细观察,是不可能知道的

因此,请将此视为一个可能合适的解决方案,但不能保证是合适的

所以你要做的是:用一个像PBKDF这样的函数,把你的静态密钥,以及每个PIN的值,得到每个PIN的唯一密钥

把这个密钥输入一个类似RC4的流密码,然后从密码的输出中删除一个方便的字节数,比如RC4的前256个字节(只要把它们扔掉,就可以使对密码的一些可能的攻击变得更加困难)。。。在

现在取下一个14位密码输出,将它们作为一个数字进行异或

结果数字将在0到16384之间

如果需要的范围必须是0000到9999

将14位输出视为一个数字,只需将其添加到管脚模10000

要拿回你的PIN,再计算一下这个14位的值,从密文中减去它,再加上20000模10000来弥补负值,你就得到了这个PIN

作为旁注。。。这里并不需要流密码,因为您已经可以使用PBKDF的输出,因为您的纯文本非常小。。。但是PBKDF是用来导出一个密钥。。。不是密码本身

相关问题 更多 >