2014-10-09 57 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