2014-10-09 40 views
0

有沒有辦法在oracle中對密碼進行單向加密?我從文本字段傳遞密碼,並且想要在oralce和存儲過程中調用存儲過程,它會加密密碼。謝謝單向加密oracle

回答

1

根據定義,加密是雙向的。你永遠不會加密密碼。我希望你真的想散列密碼。而且你不希望只是散列密碼,你真的想將密碼與某種隨機鹽和散列相結合。

您將使用dbms_crypto.hash function來計算散列,並使用dbms_random.string function來生成鹽。像

DECLARE 
    l_salt   varchar2(50); 
    l_user   varchar2(50); 
    l_pwd   varchar2(50); 
    l_string_to_hash varchar2(150); 
    l_hash   raw(150); 
BEGIN 
    l_salt := dbms_random.string('P', 50); 
    l_string_to_hash := l_user || l_pwd || l_salt; 
    l_hash := dbms_crypto.hash(utl_i18n.string_to_raw(l_string_to_hash, 'AL32UTF8'), 
           dbms_crypto.hash_sh1); 
END; 

看到的東西也this askTom discussion(這開始了使用舊dbms_obfuscation_toolkit包而不是dbms_crypto包),對爲什麼你會使用散列,醃製密碼的好處的更多背景等

+0

我得到了dbms_crypto必須聲明。是因爲我使用10g嗎? – user3731575 2014-10-09 22:57:04

+0

@ user3731575 - 'dbms_crypto'存在於10.2中。我很確定它也存在於10.1中(儘管這已經被支持了很久,內存消失了)。您可能需要您的DBA授予您訪問該軟件包的權限。 – 2014-10-09 22:58:27

+0

因此11g或更高版本不支持dbms_crypto?有什麼我可以用在10g及以後的版本?因爲我的公司即將遷移到11g。謝謝 – user3731575 2014-10-09 23:01:12