【问题标题】:Matching BlowfishJ Java implementation to dren blowfish javascript implementation; encryption values after 8-bytes are different将 BlowfishJ Java 实现与 dren blowfish javascript 实现相匹配; 8个字节后的加密值不同
【发布时间】:2012-10-12 15:00:17
【问题描述】:

我在将 BlowsfishJ Java 实现 (BlowfishJ Javadoc) 与 dren Blowfish JavaScript 实现 (dren Blowfish page) 关联时遇到了一些问题。

在 Java 方面,我使用的是 Blowfish CBC,IV 为零,密钥是 somekey。明文是WillThisEQ

在 JavaScript 方面,我认为 dren 的实现也是使用 CBC 和零 IV。密钥是somekey,明文也是WillThisEQ

这是 JavaScript 代码:

var bf = new Blowfish('some key');
var ciphertext = bf.encrypt('WillThisEQ');
var plaintext = bf.decrypt(ciphertext);

对于密文,前 8 字节匹配两种实现 (WillThis)。但是,任何后续字节都不匹配 (EQ000000)。 IV 被分解为第一个块 (Block Cipher Modes Wikipedia page)。所以,我认为这不是问题所在。

这两种实现如何才能匹配?

非常感谢您的帮助。

【问题讨论】:

    标签: java javascript algorithm encryption blowfish


    【解决方案1】:

    你的答案在dren BlowFish page you linked to的最顶端:

    如果您想加密超过 8 个字节的任何内容,您需要实现自己的密码块链接。

    所以不,它不是在做 CBC。你可以试试ECB version of BlowfishJ,但是the security is much worse

    【讨论】:

    • 非常感谢。 +1 用于阅读理解。所以,我必须为 JS 编写自己的 CBC。这一定是为什么他的实现被鼓励不要用于任何严肃的事情。 BlowfishJ 的 ECB 版本是否适用于他的实现?
    • @user717236 该页面不清楚他们是否会一起工作,但值得一试。看起来 CBC 并没有那么复杂,您只需将 IV 设置为每个块的特殊值即可。
    • 是的,我必须编写自己的 CBC。我已经确认欧洲央行的版本不一样。 JS 实现仅加密前 8 字节块,不使用 ECB。
    【解决方案2】:

    这是 Dojo 版本的 Blowfish。为我工作。 http://sladex.org/blowfish.js/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-13
      • 2018-01-09
      • 2020-07-19
      相关资源
      最近更新 更多