Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.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
使用Oracle标准_散列,在JAVA中复制散列_Java_Oracle_Hash_Compatibility - Fatal编程技术网

使用Oracle标准_散列,在JAVA中复制散列

使用Oracle标准_散列,在JAVA中复制散列,java,oracle,hash,compatibility,Java,Oracle,Hash,Compatibility,我在Oracle中使用标准的_HASH('input','SHA256')函数,用它们的相对哈希值填充记录 可通过连接到Oracle进行以下操作来复制: select STANDARD_HASH('1234','SHA256') from dual 表X 第1列,第1列-散列 1234,sha512hashresult 1234,sha512hashresult 1234,sha512hashresult 1234,sha512hashresult 现在问题是什么在JAVA中我必须做什么才

我在Oracle中使用标准的_HASH('input','SHA256')函数,用它们的相对哈希值填充记录

可通过连接到Oracle进行以下操作来复制:

select STANDARD_HASH('1234','SHA256') 
from dual
表X
第1列,第1列-散列
1234,sha512hashresult
1234,sha512hashresult
1234,sha512hashresult
1234,sha512hashresult
现在问题是什么在JAVA中我必须做什么才能准确地再现Oracle中标准_哈希生成的哈希值?有人有这方面的经验吗

注;由于某些原因,推荐的Oracle哈希函数没有种子。是否有人知道默认种子或如何解决此问题

背景:我想做什么?使用Oracle默认工具填充Oracle中的表,并使用Java程序接收输入,对其进行散列并在表中选择正确的记录

我不想要的;有人告诉我如何以不同的方式实现它,我需要的正是这种方式,否则会节省您的时间

如果您对Java方面的使用感到满意,下面的代码应该与Oracle的
标准\u哈希
产生相同的结果:

import com.google.common.base.Charsets;
import com.google.common.hash.Hashing;
...

String input = "1234";        
String hash = Hashing.sha256()
       .hashString(input, Charsets.UTF_8)
       .toString()
       // toString() returns the HEX value as lower-case, whereas
       // Oracle's STANDARD_HASH returns an upper-cased string
       .toUpperCase(); 

System.out.println(hash);
这将打印出
03AC674216F3E15C761EE1A5E255F067953623C8B388B4459E13F978D7C846F4
,这与您在Oracle中使用的相同

select STANDARD_HASH('1234','SHA256') from dual;

可以使用标准库执行此操作。与算法SHA-256一起使用

import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import javax.xml.bind.DatatypeConverter;
...

String input = "1234";        
byte[] hashBytes = MessageDigest.getInstance("SHA-256")
        .digest(input.getBytes(StandardCharsets.UTF_8));
String hash = DatatypeConverter.printHexBinary(hashBytes);
System.out.println(hash);
这将打印
03AC674216F3E15C761EE1A5E255F067953623C8B388B4459E13F978D7C846F4
,与
STANDARD_HASH
返回的字符串相同


如中所述,有更快的方法将
字节[]
转换为十六进制字符串,但
DatatypeConverter.printHexBinary()
具有作为标准库一部分的优点,对于大多数用例来说应该是不错的。

而不是尝试在Java中复制函数,您为什么不使用服务从Java调用它(让它在DB端执行),非常感谢您的支持