1

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

我的问题是数据库已经以某种方式加密数据,我需要 Java 代码来复制该功能,以便一个系统加密的文本可以被另一个系统解密,反之亦然。

我希望加密与数据库已经在做的事情兼容,但找不到准确描述 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);

无论我尝试什么,Java DES 加密似乎都与 Oracle 的不同。

4

2 回答 2

2

我发现这有效:

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);

缺少的部分是必须为 8 个零的初始化向量 (ips)。当你在 Java 中使用 null 时,你会得到不同的东西。

于 2008-09-22T15:30:56.620 回答
0

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

于 2008-09-22T17:27:31.723 回答