我在Oracle数据库中的select中创建一行的sha1-hash有问题.我在MSsql中做了如下:
@H_301_11@
软件包
DBMS_CRYPTO是产生哈希值的正确包.默认情况下,它不会授予PUBLIC,您必须具体授予(GRANT EXECUTE ON SYS.DBMS_CRYPTO TO user1).
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与它有关系,但是我还没有能够围绕着我的脑袋呢?
任何指针都将不胜感激.
此函数的结果是数据类型为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
的文档中找到更多信息