代码之家  ›  专栏  ›  技术社区  ›  Noomak

java中的解密函数不适用于3DES

  •  0
  • Noomak  · 技术社区  · 6 年前

    我试图了解一个定制的脚本库是否正常工作。

    该库使用3DES加密文本,我认为效果很好,因为构造函数在运行时会自动生成密钥:

    this.key = this.skf.generateSecret(this.ks);
    

    加密方案是“DESede”

    但我担心的是解密,因为jar假设接收来自DLL的加密文本和使用的密钥,但是如果我查看代码,我认为它无法工作,因为使用了错误的密钥。。。一个新的建造师!

    public String decrypt(String encryptedString) {
    String decryptedText = null;
    try
    {
      this.cipher.init(2, this.key);
      byte[] encryptedText = Base64.decodeBase64(encryptedString);
      byte[] plainText = this.cipher.doFinal(encryptedText);
      decryptedText = new String(plainText);
    }
    catch (Exception ex)
    {
      Logger.getLogger(AgentBrideProtocol.class.getName()).log(Level.SEVERE, "Exception " + ex);
      Logger.getLogger(AgentBrideProtocol.class.getName()).log(Level.SEVERE, "Exception " + ex.getMessage());
      ex.printStackTrace();
    }
    return decryptedText;}
    

    怎么可能工作得很好?

    1 回复  |  直到 6 年前
        1
  •  0
  •   Maarten Bodewes    6 年前

    如果使用了错误的密钥,那么文本将无法解密,或者至少无法正确解密。是的,如果您生成一个新的密钥,它将是随机的,因此它将是错误的密钥,具有非常高的确定性。

    但是,使用新密钥的事实从外观上看并不明显 好可怕 你问题中的代码片段。它使用 this.key 我们也不知道这个密钥是什么时候,怎么创建的。如果它是用 SecretKeyFactory#generateSecret 那么它可能会抛出一个 BadPaddingException 或者,对于PKCS#7 padding,每256次返回一个随机明文。

    如果您只是从一个示例中复制了代码,您应该 停在这里 先学习密码学。它是 不好 如果它是一个图书馆的一部分,那么这个图书馆需要被拆除。