2

既存のOracleフォームアプリケーションをOracleデータベースに置き換えるために、mysqlバックエンドを備えたPHPアプリケーションに取り組んでいます。

Oracleデータベースのダンプを受け取り、このデータをMySQLにロードしました。表の1つには、ユーザー名とパスワードが含まれています。パスワードはプレーンテキストとしてではなく、ハッシュとして保存されます。これらのハッシュは、DBMS_UTILITYパッケージのget_hash_value関数を使用して作成されています。

この内部Oracle関数で使用されるアルゴリズムは何ですか?

同じハッシュを作成するPHP(または他の言語)の関数を知っている人はいますか?

新しい環境(PHP + MySQL)でユーザーのパスワードを検証できるようにするには、Oracleなしでハッシュを作成する必要があります。

4

2 に答える 2

0

実装が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;

もちろん、元のハッシュがどのように作成されたかについて、現在のdb実装を確認してください。ただし、基本的に、ダイジェスト呼び出しの結果がデータベースの結果と一致する場合、ユーザーは参加しています。それ以外の場合は、参加していません。

バックエンドをMySQLに移行する場合は、MD5ハッシュまたは同様の機能を使用するように切り替えることをお勧めします。

于 2013-02-13T18:29:15.157 に答える
0

パスワードの単一のハッシュを再作成する方法を見つけようとはしませんでした。現在、ほとんどのハッシュはレインボーテーブルで見つけることができるため、ユーザーの資格情報を保護する場合は、パスワードを保存するときにソルト(できれば個人用+システムソルト)を使用することが必須になりました。

したがって、ハッシュのコピーに何時間も費やす代わりに、すべてのユーザーパスワードをリセットして、新しい(または同じ)パスワードを作成し、phpハッシュアルゴリズムを使用して適切に保存できるようにします。特にアプリケーションを再構築する場合は、ユーザーが理解できると確信しています。

于 2013-02-13T18:47:08.293 に答える