首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Sa-512 on Oracle

Sa-512 on Oracle
EN

Stack Overflow用户
提问于 2018-12-04 10:05:16
回答 1查看 6.2K关注 0票数 2

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

例如,我想加密这个字符串:

代码语言:javascript
复制
230049008251111 

对此:

DA9AA3ACDE64DB3297FF75FDE407DAF3DB7EFF0CDF987C6C16BAF28242997046997EBF5A2F6C4F7449A4936C6518A6FD24A3C0984E9C09BF19395175F1BE2B5F

这是根据我正在使用的sha512发生器。在Oracle上这样做最好的方法是什么?

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-04 10:21:29

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

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

代码语言:javascript
复制
select standard_hash ( '230049008251111', 'SHA512')
from dual
/

如果您有更长的字符串,那么Oracle提供了一个包DBMS_CRYPTO (不要与不推荐的DBMS_CRYPTO_TOOLKIT混淆)。你可以这样用..。

代码语言:javascript
复制
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没有任何变体。不知道为什么。了解更多信息

这两个调用产生相同的输出(如所希望的那样):

代码语言:javascript
复制
DA9AA3ACDE64DB3297FF75FDE407DAF3DB7EFF0CDF987C6C16BAF28242997046997EBF5A2F6C4F7449A4936C6518A6FD24A3C0984E9C09BF19395175F1BE2B5F

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

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53610371

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档