【问题标题】:Is there any function or package to generate md5crypt string in Oracle?在 Oracle 中是否有任何函数或包可以生成 md5crypt 字符串?
【发布时间】:2022-01-18 19:38:51
【问题描述】:

我们想在从 Oracle 导出的文件中加密用户密码,密码应该是 md5crypt 字符串,例如 $1$salt$hash。

--PowerShell Git function example:
Get-Md5Crypt('sachiko')
$1$gfJ1cxju47$hLcMO7LZyA2Z74yTP.TmW1

我只是想知道“DBMS_CRYPTO”函数可以用盐生成 MD5。到目前为止,虽然找不到任何好的例子。 如果Oracle没有提供合适的功能或包,我们可以采用任何替代方式。

我们将不胜感激任何建议。 谢谢。

【问题讨论】:

  • 看看dbms_crypto.mac。请注意,Oracle 使用 raw 数据类型作为键,还返回 raw 数据类型作为哈希(您的示例似乎包含所有内容的字符串)。此外,Oracle 有一个非常发达的安全框架,md5crypt 是人们可以使用的算法之一 - 从 Oracle 21 开始已弃用,因为不够安全。您可能也想考虑这一点。 docs.oracle.com/en/database/oracle/oracle-database/21/upgrd/…
  • @Sachiko 我的建议有帮助吗?您能否提供一些反馈意见?
  • @mathguy 感谢您的评论。

标签: oracle function plsql crypt


【解决方案1】:

这是一个将返回加密 sha512 输出的 oracle 函数。如上所述,如果您打算保存该值,则它应该位于定义为 RAW 的列中,即 hash_val RAW(700)。因为 DBMS_CRYPTO.HASH 返回一个 RAW 数据类型。


CREATE or REPLACE FUNCTION HASH_SHA512 (
    psINPUT IN VARCHAR2
    ) RETURN VARCHAR2 AS
    rHash RAW (512);
    BEGIN
    rHash := DBMS_CRYPTO.HASH (TO_CLOB (psINPUT), 
dbms_crypto.HASH_SH512);
    RETURN (LOWER (RAWTOHEX (rHash)));
    END HASH_SHA512;
/


SELECT HASH_SHA512('testsha512 output') from dual

7a1b50a71560fb87ce90013b9845a36edf26964655930365aec44ea1f1a9f45763f082b148b8b99dc11b71ea5336e3a93f6382ced2a914434352c2ddb48ad69e

【讨论】:

  • 很抱歉,由于我生病了,我迟到了回复。非常感谢您提供的精彩样品!!我从来没有想过如何使用 DBMS_CRYPTO 作为函数。我也会尝试应用 MD5 $1$salt$hash 样式。非常感谢:)
  • @Sachiko 欢迎您 如上所述,MD5 将被弃用,如果您需要 Oracle 支持或移植到新版本,则必须更改代码
最近更新 更多