作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前正在使用 DBMS_CRYPTO.HASH
对我的 Oracle 数据库中的密码字段进行哈希处理。然而,此时,我需要让我的 Java 应用程序能够以类似于 MySQL 的方式验证用户输入的密码。像这样的东西:
SELECT *
FROM user_login_table
WHERE password = SHA1('MyPassword');
我目前正在通过以下过程进行哈希处理:
CREATE OR REPLACE PROCEDURE
MUNGAI.p_auth_insert_user (
par_username in varchar2,
par_password in varchar2,
par_work in varchar2
)
IS l_hash raw(2000);
BEGIN
l_hash :=
dbms_crypto.hash(
utl_i18n.string_to_raw(par_password || par_work || upper(par_username),
'AL32UTF8'
),
dbms_crypto.hash_sh1
);
INSERT INTO user_login_table (user_name, p_word, work_class)
VALUES (par_username, l_hash, par_work);
END p_auth_insert_user;
/
然后我执行如下过程,插入到表中:
EXEC MUNGAI.p_auth_insert_user('MUNGAI', 'gatungo', '999')
在我的情况下,是否有更好的方法来实现这一目标?如果重要的话,我正在使用 Oracle 11g。
最佳答案
我建议您在数据库外部的代码中进行散列。这样你就独立于数据库供应商,你只需将散列实现写入一个地方。 DB 列可以是常规的 varchar。
应该是这样的:
添加用户/更改密码时,哈希会在插入/更新之前使用适当的算法和盐值提供密码。我建议至少使用 SHA-256。把盐也放在哈希旁边!
在身份验证过程中,为用户获取哈希和盐,将提供的密码与盐进行哈希,并与数据库中的哈希进行比较。
散列/加盐的提示,例如:http://crackstation.net/hashing-security.htm
关于java - 在 Oracle 11g 中选择 DBMS_CRYPTO 密码哈希,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12465539/
我是一名优秀的程序员,十分优秀!