5

我有一个专栏:

LOGIN_PWD  ->  RAW(256 BYTE) 

我必须使用插入查询将散列密码字符串插入此列。那么是否有任何 oracle 函数可以将字符串转换为字节,例如

INSERT INTO TABLE_NAME (LOGIN_PWD) VALUES (convert.toBytes('hashed password'));

我通过在本地机器上使用 string.getBytes() 方法使用 java 程序做到了这一点,但对于其他环境我不能使用相同的程序需要使用查询来完成

4

1 回答 1

11

如果您的要求如您所说的那么简单,那么您可以使用该UTL_RAW.CAST_TO_RAW功能

INSERT INTO TABLE_NAME (LOGIN_PWD)
VALUES (UTL_RAW.CAST_TO_RAW('hashed password'));

SQL 小提琴演示

例如,使用 Md5 散列的纯字符串“散列密码”,即6a25a2b265d917ea91447daa81b2506d,存储在表中的原始值是:

SELECT DUMP(LOGIN_PWD) FROM TABLE_NAME;

DUMP(LOGIN_PWD)
------------------------------------------------------------------------------------------------------------------
Typ=23 Len=32: 54,97,50,53,97,50,98,50,54,53,100,57,49,55,101,97,57,49,52,52,55,100,97,97,56,49,98,50,53,48,54,100

这与我从getBytes()Java 中相同的哈希值得到的结果相匹配。

如果您出于某种原因想将其恢复为文本,您可以使用UTL_RAW.CAST_TO_VARCHAR2

从表名中选择 UTL_RAW.CAST_TO_VARCHAR2(LOGIN_PWD);

UTL_RAW.CAST_TO_VARCHAR2(LOGIN_PWD)
-----------------------------------
6a25a2b265d917ea91447daa81b2506d   
于 2013-05-30T08:04:05.063 回答