我有一个专栏:
LOGIN_PWD -> RAW(256 BYTE)
我必须使用插入查询将散列密码字符串插入此列。那么是否有任何oracle函数可以将字符串转换为像
这样的字节INSERT INTO TABLE_NAME (LOGIN_PWD) VALUES (convert.toBytes('hashed password'));
我使用java程序在我的本地计算机上使用string.getBytes()方法做了这个,但是对于其他环境,使用相同的程序需要使用查询
答案 0 :(得分:8)
如果您的要求与您所说的一样简单,那么您可以使用UTL_RAW.CAST_TO_RAW
function:
INSERT INTO TABLE_NAME (LOGIN_PWD)
VALUES (UTL_RAW.CAST_TO_RAW('hashed password'));
例如,使用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