Encryption 简单加密教程?

Encryption 简单加密教程?,encryption,scripting,Encryption,Scripting,我正在寻找一个简单的加密教程,用于将一个字符串编码为另一个字符串。我在寻找一般的数学术语或伪代码;我们使用的脚本语言无法访问库 我们有一个Micros POS(销售点)系统,我们想编写一个脚本,将编码字符串放在收据的底部。此字符串是客户用来登录网站并填写有关业务的调查的字符串 在这个字符串中,我想得到一个三位数的硬编码位置标识符,日期和时间;例如。: 0010912041421 其中001是位置标识符,09是年份,12是月份,04是日期,1421是军事时间(下午2:41)。这样我们就知道受访者访

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

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

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

显然,如果我们只是打印了这个字符串,就很容易有人破解“代码”,并以我们的费用填写无休止的调查,而不必实际访问我们的商店。所以,如果我们能做一个简单的加密,并用一个预设的密钥解码,那就太好了。解码将在网站上进行


加密字符串的字符数也应该大致相同,以减少人们误键入任意长字符串的可能性

您使用/熟悉哪种语言

具有实现Rijndael算法的c源代码。它们还提供了所有工作原理的伪代码描述。这可能是你最好的选择。但是大多数主要的算法都有提供的源代码

如果您确实实现了自己的Rijndael算法,那么请注意高级加密标准限制了密钥和块的大小。所以,如果你想实现交叉兼容,你需要使用那些大小,我认为是128键大小和128192256键大小

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

另一种可能更容易的选择是DES,或者更具体地说是3DES。但我手边没有链接。我看看能不能挖出来一个

编辑: 具有DES和三重DES的FIPS标准。它包含了所有的排列表,我记得有一次我手动用1和0进行了一轮DES。因此,一旦开始,实施起来并不太难,只是要小心不要在数字表周围进行更改。如果我没记错的话,它们被称为P和S框

如果你使用这些,那么使用三重DES而不是DES,3DES实际上使用两个密钥,使算法的密钥大小加倍,这是DES唯一真正的弱点。据我所知,除了暴力,它还没有被破解。3DES使用一个密钥进行加密,另一个密钥进行解密,然后使用同一个密钥再次加密


还提供了用各种语言实现Blowfish算法的链接。

加密不会为您提供任何完整性保护或身份验证,而这正是您在此应用程序中所需要的。客户知道他们在何时何地购买,所以你没有什么可隐瞒的

相反,考虑使用消息身份验证代码。它们通常基于加密散列,如SHA-1

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


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

首先,我应该指出,如果您没有解决实际遇到的问题,那么这可能是一个相当大的工作量。既然你想对你的调查功能进行某种监控/分析,那么最好在事后检测可疑行为,并提供纠正问题的方法

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

  • 为每个POS终端提供自己的私钥
  • 为每个POS终端提供服务器的公钥
  • 让终端加密日期、位置等信息(使用服务器的公钥)
  • 让终端签署加密数据(使用终端的私钥)
  • 将结果编码为人类友好的字符串(Base64?)
  • 在收据上打印字符串
  • 不过,您可能会遇到人类友好型字符串长度的问题


    注意您可能需要切换签名和加密步骤;我手边没有密码参考书。请在著名的参考资料中查找,例如Schneier的参考资料。

    我发现这是一个在各种情况下选择正确的加密原语的有用指南。它告诉您要使用什么加密/哈希以及什么大小是合适的。它包含指向它所指的各种加密原语的链接。

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


    一个小问题是,您可能希望在军事时间上使用更多的数字,因为您可以在同一天从同一地点在同一分钟内获得多个事务。

    我想使用的是XOR。它非常简单,我们可以用专有的脚本语言来实现(我们不能用它进行任何真正的加密),如果有人