Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中的重复Oracle DES加密_Java_Oracle_Encryption - Fatal编程技术网

Java中的重复Oracle DES加密

Java中的重复Oracle DES加密,java,oracle,encryption,Java,Oracle,Encryption,我最近问了一个关于Oracle加密的问题。在为自己寻找解决方案的过程中,我决定为某些任务将加密(嗯,模糊处理)转移到应用程序端 我的问题是,数据库已经以某种方式对数据进行了加密,我需要Java代码来复制该功能,以便一个系统加密的文本可以被另一个系统解密,反之亦然 我希望加密与DB已经在做的事情兼容,但找不到确切描述Oracle正在做什么的文档。我如何在Java中复制它 dbms_obfuscation_toolkit.DESEncrypt( input_string => v_stri

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

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

我希望加密与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);
无论我怎么尝试,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);

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

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

1。Fixed IV意味着第一个块的(8字节)密文对于同一个明文块总是相同的——第一个块上可能存在字典攻击。2.CBC模式意味着攻击者可以很容易地在解码的明文中执行位翻转(但运行它前面的明文块)。正如我在问题中所说的,这更多地用于模糊处理,而不是真正的加密。无论如何,修复IV是不可避免的,因为Oracle就是这样做的。没错,但不幸的是,在这个场景中,我被困在了问题中描述的现有加密算法中。我需要做的正是Java所做的。在实践中,我认为更现代的Oracle encryption可以与Java等国外加密库完全交互操作。