php - 创建哈希以与 Oracle DBMS_UTILITY.get_hash_value 匹配

标签 php oracle hash database

我正在开发一个带有 mysql 后端的 PHP 应用程序,以用 Oracle 数据库替换现有的 Oracle Forms 应用程序。

我收到了 Oracle 数据库的转储并将此数据加载到 MySQL 中。其中一个表包含用户名和密码。密码不是以纯文本形式存储,而是以散列形式存储。这些哈希是使用 DBMS_UTILITY 包中的 get_hash_value 函数创建的。

这个内部 Oracle 函数使用的算法是什么?

有人知道 PHP(或任何其他语言)中可以创建相同散列的函数吗?

我需要在没有 Oracle 的情况下创建哈希,以便能够在新环境(PHP + MySQL)中验证用户密码。

最佳答案

我不认为 Oracle 详细说明了实现。但是您不需要在 PHP 中重新创建它,只需围绕它包装一个函数并从 PHP 调用它:

create function digest( p_username in varchar2, p_password in varchar2 ) return varchar2
is
begin
    return ltrim( to_char( dbms_utility.get_hash_value( upper(p_username)||'/'||upper(p_password), 1000000000, power(2,30) ), rpad( 'X',29,'X')||'X' ) );
end digest;

-- digest by calling db function
select digest('UserA','MyPassword') from dual;

当然,请检查您当前的数据库实现,了解原始哈希是如何创建的。但基本上,如果摘要调用的结果与数据库中的匹配,则用户在,否则不在。

如果您正在将后端迁移到 MySQL,那么您可能希望切换到使用 MD5 哈希或类似的方式。

关于php - 创建哈希以与 Oracle DBMS_UTILITY.get_hash_value 匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14859880/

相关文章:

php - fatal error : Class 'Dotenv\Dotenv' not found in

linux - Oracle 表到 SAS 数据集

c - 如何使用 ANSI C 获取文件的 sha256 哈希值

mysql - 使用 Rails 查询返回单个字段

PHP 字符串操作和 SQL 查询

php - Magento MySQL 数据库备份 - 会恢复删除一切吗?

php - 如何通过起始索引和结束索引提取子字符串?

javascript - 尝试使用 JQuery 从 Oracle 数据库中选择全部内容时出现 "CLI has stopped working"?

java - 在现有表上创建序列 - ORA-00940 : invalid ALTER command

ruby-on-rails - 如何在 Rails 3 中为哈希中的变量应用 attr_accessor