加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

在Oracle中创建一个sha1-hash行

发布时间:2020-12-12 13:48:18 所属栏目:百科 来源:网络整理
导读:我在Oracle数据库中的select中创建一行的sha1-hash有问题.我在MSSQL中做了如下: SELECT *,HASHBYTES('SHA1',CAST(ID as varchar(10)+ TextEntry1+TextEntry2+CAST(Timestamp as varchar(10)) as HashFROM dbo.ExampleTableWHERE ID = [foo] 但是,在使用Orac
我在Oracle数据库中的select中创建一行的sha1-hash有问题.我在MSSQL中做了如下:
SELECT *,HASHBYTES('SHA1',CAST(ID as varchar(10)+
  TextEntry1+TextEntry2+CAST(Timestamp as varchar(10)) as Hash
FROM dbo.ExampleTable
WHERE ID = [foo]

但是,在使用Oracle时,似乎找不到类似的功能.
就我的谷歌给我带来的是,我猜到dbms_crypto.hash_sh1与它有关系,但是我还没有能够围绕着我的脑袋呢?

任何指针都将不胜感激.

软件包 DBMS_CRYPTO是产生哈希值的正确包.默认情况下,它不会授予PUBLIC,您必须具体授予(GRANT EXECUTE ON SYS.DBMS_CRYPTO TO user1).

此函数的结果是数据类型为RAW.您可以将其存储在RAW列或使用RAWTOHEX或UTL_ENCODE.BASE64_ENCODE函数将其转换为VARCHAR2.

HASH函数被重载以接受三个数据类型作为输入:RAW,CLOB和BLOB.由于rules of implicit conversion,如果您使用VARCHAR2作为输入,Oracle将尝试将其转换为RAW,并且很有可能会失败,因为此转换仅适用于十六进制字符串.

如果您使用VARCHAR2,则需要将输入转换为二进制数据类型或CLOB,例如:

DECLARE
   x RAW(20);
BEGIN
   SELECT sys.dbms_crypto.hash(utl_raw.cast_to_raw(col1||col2||to_char(col3)),sys.dbms_crypto.hash_sh1) 
     INTO x 
     FROM t;
END;

您将在DBMS_CRYPTO.hash的文档中找到更多信息

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读