gpt4 book ai didi

java - 在 Oracle 11g 中选择 DBMS_CRYPTO 密码哈希

转载 作者:行者123 更新时间:2023-11-29 06:40:49 24 4
gpt4 key购买 nike

我目前正在使用 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。

应该是这样的:

  1. 添加用户/更改密码时,哈希会在插入/更新之前使用适当的算法和盐值提供密码。我建议至少使用 SHA-256。把盐也放在哈希旁边!

  2. 在身份验证过程中,为用户获取哈希和盐,将提供的密码与盐进行哈希,并与数据库中的哈希进行比较。

散列/加盐的提示,例如:http://crackstation.net/hashing-security.htm

关于java - 在 Oracle 11g 中选择 DBMS_CRYPTO 密码哈希,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12465539/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com