2014-09-02 81 views
1

我有3個變量名,密碼,郵件。我想用MD5將它們散列爲名稱密碼郵件。當我使用此代碼:如何將VARCHAR2與DBMS_OBFUSCATION_TOOLKIT.MD5字母數字混合使用

SELECT sys.DBMS_OBFUSCATION_TOOLKIT.MD5(INPUT_STRING => '[email protected]') FROM DUAL 

輸出樣子:

8����n�iB 

我想討論解決這個字母。像(隨機的例子);

AD63Ss32S32casad23D 

是否有任何方式與MD5或哪個ORACLE SQL函數做的就像我想要的那樣。

+0

你也許想轉換到/自RAW。但是,你將如何存儲和使用這個值?並且您使用的是哪個版本的Oracle - 如果使用11g,則可以使用「DBMS_CRYPTO」,而現在這已被棄用。 – 2014-09-02 18:51:57

+0

我使用的是oracle 10g。該功能不起作用。我想要散列給我的唯一標識符。 – hurricane 2014-09-02 19:02:40

+0

好的,但您需要將其視爲RAW以查看十六進制值;所以你應該將其作爲RAW存儲/檢索。你知道散列並不是唯一的,對嗎? – 2014-09-02 19:05:39

回答

2

你可以在你輸入的字符串轉換爲RAW和傳遞中,在獲得原始值回:

select dbms_obfuscation_toolkit.md5(input => 
    utl_i18n.string_to_raw(data => '[email protected]')) from dual; 

0B38E5C219F8E40CADD2156ECBCB6942 

或者傳遞一個字符串並將轉換結果輸出到RAW:

select utl_i18n.string_to_raw(data => dbms_obfuscation_toolkit.md5(
    input_string => '[email protected]')) from dual; 

0B38E5C219F8E40CADD2156ECBCB6942 

您在評論中表示您使用的是10g,但如果您使用的是11g或更高版本,則應考慮轉而使用DBMS_CRYPTO,因爲現在不推薦使用DBMS_OBFUSCATION_TOOLKIT。你不能從普通SQL雖然使用它,因爲typ參數是PLS_INTEGER,但作爲從塊的示例調用:

set serveroutput on 
begin 
    dbms_output.put_line(dbms_crypto.hash(src => utl_i18n.string_to_raw(
    data => '[email protected]'), typ => dbms_crypto.hash_md5)); 
end; 
/

anonymous block completed 
0B38E5C219F8E40CADD2156ECBCB6942 
+0

Ty爲您的份額。我使用10g和RAW值對我來說已經足夠了。晚上好。 – hurricane 2014-09-02 19:06:13

相關問題