Oracle上的SHA-512

时间:2018-12-04 10:05:16

标签: oracle hash cryptography oracle12c sha512

我想在Oracle 12上使用SHA-512加密一些数据。

例如,我想加密此字符串:

230049008251111 

对此:

DA9AA3ACDE64DB3297FF75FDE407DAF3DB7EFF0CDF987C6C16BAF28242997046997EBF5A2F6C4F7449A4936C6518A6FD24A3C0984E9C09BF19395175F1BE2B5F

这是根据我使用的sha512 generator而定的。 在Oracle上这样做的最佳方法是什么?

谢谢

1 个答案:

答案 0 :(得分:3)

Oracle具有对SHA-512的内置数据库支持。

如果您想使用纯SQL的解决方案并且您的输入字符串在SQL字符串长度限制之内(4000个字符,除非您启用了12c扩展varchar2语义),您可以这样做:

select standard_hash ( '230049008251111', 'SHA512')
from dual
/

如果字符串较长,Oracle将提供DBMS_CRYPTO软件包(不要与已弃用的DBMS_CRYPTO_TOOLKIT混淆)。您可以像这样使用它...

declare
     str clob;
     hsh raw(64);
begin      
     str := '230049008251111';
     hsh := dbms_crypto.hash (str, dbms_crypto.HASH_SH512);
     dbms_output.put_line(hsh);
end;
/

...或任何对您的应用有意义的东西。 dbms_crypto.hash()的三个变体采用BLOB,CLOB和RAW。普通的旧varchar2没有任何变体。不知道为什么。 Find out more

这两个调用都产生相同的输出(可能希望如此):

DA9AA3ACDE64DB3297FF75FDE407DAF3DB7EFF0CDF987C6C16BAF28242997046997EBF5A2F6C4F7449A4936C6518A6FD24A3C0984E9C09BF19395175F1BE2B5F

正如@WernfriedDomscheit所观察到的那样,默认情况下不授予在DBMS_CRYPTO上执行的权限。但是,STANDARD_HASH()是。因此,根据您的要求,您可能需要与DBA团队合作以获得必要的特权。