简单的加密教程?

时间:2009-12-04 19:26:09

标签: encryption scripting

我正在寻找一个简单的加密教程,用于将字符串编码为另一个字符串。我在一般的数学术语或伪代码中寻找它;我们使用的脚本语言无法访问库。

我们有一个Micros POS(销售点)系统,我们想编写一个脚本,将编码的字符串放在收据的底部。此字符串是客户用于登录网站并填写有关业务的调查的字符串。

所以在这个字符串中,我想获得一个三位硬编码的位置标识符,日期和时间;例如。: 0010912041421 其中001是位置标识符,09是年份,12是月份,04是日期,1421是军事时间(2:41 PM)。这样我们就知道了受访者所访问的位置以及何时访问。

显然,如果我们只打印那个字符串,那么很容易让某人破解“代码”并以我们的代价填写无休止的调查,而无需实际访问我们的商店。因此,如果我们可以进行简单的加密,并使用预设密钥对其进行解码,那就太棒了。解码将在网站上进行。

加密字符串也应该是大约相同数量的字符,以减少人们错误输入长任意字符串的可能性。

6 个答案:

答案 0 :(得分:2)

加密不会为您提供任何完整性保护或身份验证,这是您在此应用程序中所需的。客户知道他们何时何地进行购买,因此您无需隐藏任何内容。

相反,请考虑使用消息验证代码。这些通常基于加密哈希,例如SHA-1。

此外,您还需要考虑重播攻击。也许我不能生成自己的代码,但是什么阻止我使用相同的代码返回几次?我假设您每分钟可能会为多个客户提供服务,因此您需要接受来自同一位置的重复时间戳。

在这种情况下,您需要添加唯一标识符。与时间戳结合使用时可能只是唯一的。或者,您可以简单地将时间戳扩展为包括秒或十分之一秒。

答案 1 :(得分:0)

您使用/熟悉哪种语言?

The Rijndael website有c源代码来实现Rijndael算法。他们还有关于它如何工作的伪代码描述。这可能是你可以选择的最好的。但是大多数主要算法都在某处提供了源代码。

如果您确实实施了自己的Rijndael算法,请注意高级加密标准会限制密钥和块大小。因此,如果您想要交叉兼容,则需要使用我认为128个密钥大小和128,192,256个密钥大小的那些大小。

滚动自己的加密算法是你不应该做的事情,如果你可以避免它。因此,找到一个真正的算法并在必要时实现它绝对是一种更好的方法。

另一种可能更容易的替代方案是DES,或更具体的3DES。但我没有方便的链接。我会看看我是否可以挖一个。

编辑: This link具有DES和Triple DES的FIPS标准。它包含所有排列表等等,我记得一次通过一轮DES手动取一些1和0。所以一旦你开始实施起来并不难,只要注意不要改变数字表。如果我没记错的话,P和S盒就会被调用。

如果你使用这些,那么使用Triple DES而不是DES,3DES实际上使用两个密钥,将算法的密钥大小加倍,这是DES的唯一真正弱点。据我所知,除了暴力之外,它还没有被破解。 3DES通过des使用一个密钥进行加密,另一个密钥进行解密,并使用相同的密钥进行加密。

The Blowfish website还有以各种语言实现Blowfish算法的链接。

答案 2 :(得分:0)

首先,我应该指出,如果你没有解决你实际遇到的问题,这可能需要花费大量的工作。由于您无论如何都希望对您的调查功能进行某种监控/分析,因此您可能最好在事后检测可疑行为并提供纠正任何问题的方法。

我不知道你的情况是否可行,但这是一个非对称加密的教科书案例。

  1. 为每个POS终端提供自己的私钥
  2. 为每个POS终端提供服务器的公钥
  3. 让终端加密日期,位置等信息(使用服务器的公钥)
  4. 让终端签署加密数据(使用终端的私钥)
  5. 将结果编码为人性化的字符串(Base64?)
  6. 在收据上打印字符串
  7. 但是,您可能会遇到人性化字符串长度的问题。

    注意您可能需要触发签名和加密步骤;我没有方便的加密参考书。请在信誉良好的参考文献中查阅,例如Schneier的Applied Cryptography

答案 3 :(得分:0)

我发现Cryptographic Right Answers是选择在各种情况下使用的正确加密基元的有用指南。它告诉您使用什么加密/哈希以及适当的大小。它包含指向它所引用的各种加密原语的链接。

答案 4 :(得分:0)

一种方法是使用AES - 使用位置,年,月和日 - 使用私钥对其进行编码,然后将最后4位数(军事时间)作为反转向量。然后,您可以将其转换为某种形式的Base32。你最终会得到一些看起来像产品密钥的东西。但是对你来说可能太长了。

一个小问题是你可能想要在军事时间使用更多的数字,因为你可以想象在同一天内同一时间内同一地点获得多笔交易。

答案 5 :(得分:0)

我想要使用的是异或。这很简单,我们可以使用专有的脚本语言(我们无法在其中进行任何真正的加密),如果有人打破它,我们就可以轻松地更改密钥。