我有一个专栏:
LOGIN_PWD -> RAW(256 BYTE)
我必须使用插入查询将散列密码字符串插入此列。那么是否有任何 oracle 函数可以将字符串转换为字节,例如
INSERT INTO TABLE_NAME (LOGIN_PWD) VALUES (convert.toBytes('hashed password'));
我通过在本地机器上使用 string.getBytes() 方法使用 java 程序做到了这一点,但对于其他环境,我不能使用相同的程序需要使用查询来完成
最佳答案
如果您的要求像您所说的一样简单,那么您可以使用 UTL_RAW.CAST_TO_RAW
function :
INSERT INTO TABLE_NAME (LOGIN_PWD)
VALUES (UTL_RAW.CAST_TO_RAW('hashed password'));
SQL Fiddle demo .
例如,使用 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
:从 TABLE_NAME 中选择 UTL_RAW.CAST_TO_VARCHAR2(LOGIN_PWD);
UTL_RAW.CAST_TO_VARCHAR2(LOGIN_PWD)
-----------------------------------
6a25a2b265d917ea91447daa81b2506d
关于oracle - 需要一个oracle函数将字符串转换为字节数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16829681/