【问题标题】:decode 3Des with 64bit encoded text使用 64 位编码文本解码 3Des
【发布时间】:2016-07-10 05:02:10
【问题描述】:

如果我们有一个使用 3Des 和 64 位编码的编码文本,那么拥有加密密钥就足够了吗?我们还需要什么信息。

我试过了,我遇到了以下错误。

javax.crypto.BadPaddingException:给定最终块未正确填充

【问题讨论】:

  • 对不起,我指的是从加密代码中取回原始文本。目前我有加密的代码和密钥。作为给我的信息,他们使用'3Des with 64bit encoding'
  • 大概您的意思是加密的 3DES(三重 DES)和 DES 和 3DES 都没有的 64 位密钥。
  • 使用 TripleDES @zaph 的 BASE64 编码
  • 3DES

标签: java encryption 3des java-security


【解决方案1】:
  1. DES、3DES 和 AES 等都是块密码,这意味着它们的输入数据必须是块大小的精确倍数(DES 中为 8 字节)。要么确保数据始终是块大小的倍数,要么使用填充、PKCS#5 添加和删除填充字节以实现块倍数要求。
  2. 不要使用 3DES,它已被 AES 取代,对于新工作来说不够安全。
  3. 3DES 是 168 位密钥(24 字节),有时为了兼容性,使用 112 位密钥(16 字节)。最初对字节进行奇偶校验,每个字节中只有 7 位数据,奇偶校验通常不再进行,但仍然只使用每个字节的低 7 位。
  4. 始终最好提供精确大小的密钥。
  5. 您应该在带有随机 IV 的 CBC 模式下使用 AES。
  6. 如果您使用的是字符串密钥,可能是用户提供的)您应该使用 PBKDF2 派生正确的长度密钥。
  7. 消息身份验证 MAC 也是一个好主意。

【讨论】:

  • 嗨 zaph,非常感谢您的回复。实际上,这是我需要解密并用于我的应用程序的一些旧数据。所以我没有改变它的选择:) 是的,我已经阅读了一些关于这项技术的信息。但是在解密时遇到错误。你对此有什么想法吗?线程“主”javax.crypto.BadPaddingException 中的异常:给定最终块在 com.sun.crypto.provider.SunJCE_f.b(DashoA13) 的 com.sun.crypto.provider.SunJCE_f.b(DashoA13*..) *..)
  • 请注意答案中的第 1 点。您需要确切知道数据是如何加密的。但是由于安全性不是问题,只需将其解密,就像桥梁设计者使用错误的设计方法一样。
  • 给出的信息是“使用 3Des + 64 位编码加密”和使用的密钥。 :) 我缺少他们使用的填充机制?
  • 您还缺少:1.ECB、CBC、CTR等模式。2.可能的IV。 3. 如何将 64 位密钥与需要 168 位(24 字节)密钥的 3DES 结合使用。
  • 当所有子密钥都相同时,三重 DES (3DES) 也适用于 56 位密钥(具有 8 个奇偶校验位)。还有不同的密钥组合,如 K1-K1-K1(56 位)、K1-K2-K1(112 位)、K1-K2-K3(168 位)。此外,所有这些组合都可以使用 3 次加密 (EEE) 或加密-解密-加密 (EDE) 执行。带有 EDE 的 K1-K1-K2 也是可能的。
猜你喜欢
  • 2015-08-12
  • 2010-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-30
相关资源
最近更新 更多