代码之家  ›  专栏  ›  技术社区  ›  Mr. Shiny and New 安宇

Java中的重复Oracle DES加密

  •  1
  • Mr. Shiny and New 安宇  · 技术社区  · 18 年前

    我最近问了一个关于Oracle加密的问题。在为自己寻找解决方案的过程中,我决定为某些任务将加密(嗯,模糊处理)转移到应用程序端。

    我希望加密与DB已经在做的事情兼容,但找不到确切描述Oracle正在做什么的文档。我如何在Java中复制它?

    dbms_obfuscation_toolkit.DESEncrypt(
      input_string => v_string,
      key_string => key_string,
      encrypted_string => encrypted_string );
    RETURN UTL_RAW.CAST_TO_RAW(encrypted_string);
    

    无论我尝试什么,似乎JavaDES加密与Oracle不同。

    2 回复  |  直到 18 年前
        1
  •  2
  •   Mr. Shiny and New 安宇    18 年前

    我发现这很有效:

    KeySpec ks = new DESKeySpec(new byte[] {'s','e','c','r','e','t','!','!'});
    SecretKeyFactory skf = SecretKeyFactory.getInstance("DES");
    SecretKey sk = skf.generateSecret(ks);
    Cipher c = Cipher.getInstance("DES/CBC/NoPadding");
    IvParameterSpec ips = new IvParameterSpec(new byte[] {0,0,0,0,0,0,0,0});
    c.init(Cipher.ENCRYPT, sk, ips);
    // or
    c.init(Cipher.DECRYPT, sk, ips);
    

    缺少的部分是初始化向量(ips),它必须是8个零。当您在Java中使用null时,会得到一些不同的结果。

        2
  •  0
  •   cagcowboy    18 年前

    在数据库中使用Java将是另一种(应该!)保证代码(以及结果)相同的方法。