DES加密和密码模式

时间:2009-02-08 13:47:05

标签: c encryption cryptography ecb

我需要加密ISO 8583消息......这里的问题是消息比密钥长。我需要一些帮助我如何加密这个字符串。

例如:我的字符串中有300个字符;我应该单独加密每个16个字符然后连接它们,因为我的主密钥长度是16个字节?

感谢您的帮助......


ISO 8583-1:2003金融交易卡发起的消息 - 交换消息规范 - 第1部分:消息,数据元素和代码值。

5 个答案:

答案 0 :(得分:7)

DES是一种分组密码,分组密码具有不同的操作模式。

您提到的模式称为ECB(电子密码本),并且不是很安全(实际上,DES也不是,但稍后会更多)。

我建议您使用CBC或其他模式。

您可以在此处阅读有关分组密码的操作模式:Block cipher modes of operation

至于密码本身,我建议你尽量避免使用DES。 DES现在非常容易破解。如果AES不可用,请使用AES或至少3DES。

编辑:为了回应updated question,是的,如果明文大小不是块大小的倍数,则需要填充最后一个块。

答案 1 :(得分:4)

分组密码有许多不同的操作模式。 如果您只需要将ECB应用于纯文本,只需将纯文本拆分为大小相等的8字节块(DES块大小)并分别加密。
根据您想要实现的目标,您也可以使用

  • ECB ,每个块独立于所有其他(前一个)块,以块方式加密。缺点:已知的纯文本攻击可以揭示密文中的模式,因为相同的纯文本将始终加密为相同的密文
  • CBC 这里有一个初始化向量,每个块都依赖于所有以前加密的块。这就是为什么第一个块需要IV
  • CFB 这是一个有趣的问题,因为它允许您将分组密码转换为流密码,如果您想要加密视频流或其他任何内容,这可能很有用(类似于OFB基本上生成密钥流)
  • CTS 如果您想要加密数据但希望避免填充,则可能会使用密码窃听。一个用法示例可能是加密数据库中的blob,在将数据写入数据库后无法调整大小。

还有更多模式,但这些是最常用的模式(imho) 正如其他人指出的那样,访问Wikipedia了解所有细节。

<强>更新
至于填充,您有不同的possibilities。我建议使用ANSI X.923标准,它基本上要求你用零填充最后一个缓冲区,并在最后一个字节中附加一个计数器,它给你最后一个块中的有效字节数。 ISO10126中使用了相同的思想,但这次填充是用随机字节完成的。 请注意,使用CTS时可以完全避免填充。

也许问问自己,使用加密库来实现这项工作实际上是否更容易 如果您正在使用C ++,请转到Crypto++(不是那么简单,但一致的c ++风格),Java和.NET内置了加密提供程序。如果你想使用普通C,我可以推荐libTomCrypt(非常好用)。

答案 2 :(得分:2)

密钥长度不会对邮件大小施加限制。消息可以是您想要的长度,您的128位密钥(非标准的DES?)仍然是好的。 DES cipher对字节块进行操作,一次一个块。 Standard DES使用56位密钥(加上8个奇偶校验位)和64位块。

  

我应该单独加密每个16个字符   然后连接他们,因为我的主密钥   长度是16个字节?

密码通常不要求密钥和块大小相同;他们可以定义复杂的操作,使用给定的明文块,并用密钥将其转换为密文块(通常具有相同的大小)。当需要加密多个块时,指定mode of operation来描述一个块如何与进程中的下一个块相关。

电子密码本(ECB)模式下操作时,消息被分成块,每个明文块用相同的密钥分别加密(然后连接生成的密文块) 。像其他modes of operation for DES(即CBC,CFB,OFB)一样,这种方法有其优点和缺点。您需要选择最适合您应用的模式。

不过,您还应该知道DES现在是considered insecure

答案 3 :(得分:2)

您需要查找encryption modes - 其中包含密码块链接(CBC)和“不使用”模式电子代码簿(ECB)等名称,甚至还有一些外来名称,如Infinite Garble Extension (IGE)。该页面清楚地说明了为什么不应该使用ECB模式。

CBC是一种标准的,稳固的运作模式。 OFB和CFB也被广泛使用。

您意识到美国联邦政府不再使用普通DES,因为它不够安全(因为它使用的是56位密钥并且可以通过暴力破解)?三重DES几乎是可以容忍的 - 它有一个112位或168位密钥,具体取决于您使用它的方式。不过,标准是高级加密系统AES。除非出于向后兼容性原因,否则应在新的生产代码中使用AES而不是DES。

此外,在尝试编写生产代码之前,您应该知道这些问题的答案。我相信这是家庭作业或个人兴趣的本质。

答案 4 :(得分:2)

您可能希望加密,原因如下:

  1. 传输作为PIN块(数据元素52)的安全数据,当您从收单行密钥转换为发行者密钥时,HSM会处理此数据。
  2. 或MAC消息,然后您将选择一些字段进行哈希并附加到消息的末尾(通常是数据元素124或128)
  3. 或者您希望存储ISO 8583消息并希望遵守PCI DSS规则,在这种情况下,如果存在,您将加密以下数据元素
    • DE 2 - 卡号
    • DE 14 - 到期日
    • DE 35 - Track II
    • DE 45 - Track I
    • DE 48 - EMV(芯片)数据(MasterCard TLV)
    • DE 52 - PIN Block
    • DE 55 - EMV(芯片)数据(签证)
  4. 还有一件事,你的主密钥应该是128位,以符合Visa的要求(Triple DES授权LMK至少有双倍密钥,32位 - 128位密钥)