0

我一直在开发一个 Java Web 应用程序,其中包含使用 Spring Security、md5 加密和 Oracle 作为数据库的登录功能。在使用 md5 加密之前,我的应用程序运行良好。但是使用它之后,我的应用程序不想重定向到下一页,总是登录错误。我一直在谷歌上搜索,它说oracle还不支持md5。

这是xml:

    <authentication-manager>
    <authentication-provider>
        <password-encoder hash="md5"/>
        <jdbc-user-service data-source-ref="dataSource"
        users-by-username-query="
          SELECT username, password, 1 as enabled 
          FROM USER_ACCOUNT WHERE username=?"

        authorities-by-username-query="        
          SELECT u.username, ur.authority FROM USER_ACCOUNT u, USER_ROLES ur 
          where u.user_id = ur.user_id and u.username =?" 

           /> 
    </authentication-provider>
</authentication-manager>

有什么方法可以让 oracle db 支持 md5 加密?

问候

尤努斯

4

2 回答 2

2

EJP 是对的。MD5 是一种加密散列函数,而不是一种加密算法。就加密算法而言,我相信 Oracle 支持具有各种密钥大小(128、192 和 256 位)的 3DES168 和 AES。

对于登录功能,您肯定希望使用散列函数而不是加密。哈希是一种单向数据转换,而加密是用于双向转换(您可以加密和解密目标数据)。话虽如此,Oracle 确实支持其文档中概述的各种散列方法:http: //docs.oracle.com/cd/E11882_01/appdev.112/e25788/d_crypto.htm#ARPLS65700

SHA1 哈希: hashed_data := dbms_crypto.hash( original_data, dbms_crypto.HASH_SH1 );

MD5 哈希: hashed_data := dbms_crypto.hash( original_data, dbms_crypto.HASH_MD5 );

如果您希望在我建议使用 SHA-1 实现身份验证系统。您还应该在散列密码之前对密码进行加盐。你可以在这里阅读一篇关于密码加盐的优秀文章:http ://www.cubehouse.org/blog/2011/05/02/password-hashing-how-to-make-it-not-suck-a-basic-guide /

为了增加安全性,使用长比特长度的 SHA-2,因为针对 SHA-1 的攻击正变得非常有效。

于 2013-10-29T00:44:12.377 回答
0

您需要更新您的用户密码。

更新用户设置密码 = lower(DBMS_OBFUSCATION_TOOLKIT.md5 (input => UTL_RAW.cast_to_raw('topSecretPassword'))) where username = 'user';

于 2015-04-07T00:04:24.463 回答