我最近问了一个有关 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 的不同。
最佳答案
我发现这个作品:
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);
缺少的部分是初始化 vector (ips),它必须是 8 个零。当您在 Java 中使用 null 时,您会得到不同的结果。
关于java - Java 中的重复 Oracle DES 加密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/115503/