web-dev-qa-db-ja.com

Oracleにはハッシュ関数が組み込まれていますか?

可能性のある複製:
PL/SQLにハッシュ関数はありますか?

Oracle 11gにNCLOBデータベースタイプの列があります。そのコンテンツのハッシュ値を取得する必要があります。組み込みのOracle関数を使用して、またはPL/SQL内でこれを行うにはどうすればよいですかSP Oracleでは?

14
moorara

はい:ハッシュと暗号化(関連しているがまったく同じではない)はすべて、SYSパッケージDBMS_CRYPTOを介して行われます。

シンプルなSHA-1ハッシュ

l_hash := dbms_crypto.hash( l_src, dbms_crypto.HASH_SH1 );

シンプルなMD5ハッシュ

l_hash := dbms_crypto.hash( l_src, dbms_crypto.HASH_MD5 );

dbms_crypto.hash()の概要

Hash()関数は、RAW、BLOB、およびCLOBのタイプを受け入れるように多重定義されています。生の受け入れ可能な入力タイプの 暗黙データ変換 によると、RAW、CHAR、VARCHAR2、NCHAR、NVARCHAR2、LONG、BLOBです。 RAW /暗黙のRAW変換、BLOB、およびCLOBでカバーされていない他のすべてのデータ型(DATE、TIMESTAMPなど)は、最初にTO_CHAR()を介して渡す必要があります。

Dbms_crypto.hash()が次のハッシュアルゴリズムをサポートしていることは注目に値します。

  • HASH_MD4
  • HASH_MD5
  • HASH_SH1

パスワード:ジャストインケース

パスワードを保存する場合は、暗号化ハッシュ(md5、sha-1など)ではなく、パスワード保存ハッシュ(bcrypt、PBKDF2、またはscrypt)を使用することをお勧めします。違いは、パスワードストレージハッシュは解読に時間がかかることを意味し、暗号化ハッシュは迅速に実行されることを意味します。強引な方法でシステムのパスワードリストを攻撃する場合、暗号化アルゴリズムを通過するソルト値を解読しようとすると、桁違いに時間がかかります。単一の値でパスワードハッシュを使用すると、100ミリ秒ほどかかる可能性があることを考慮してください(単一の認証ログインの場合はそれほどではありません)。

Oracle Hates Password Hashes

その価値のために、パスワードハッシュサポートを提供するOracleのパッケージは知りません。ただし、 ' loadjava 'を使用し、Java bcrypt実装をOracleのRDBMSで実行されるJVM内に配置することで、これを実現できます。次に PL/SQLラッパー を呼び出すJava bcryptを実装するクラス。中間層を使用している場合は、その言語(.NET、PHP 、Perl、Ruby、Python、Javaなど)、「loadjava」の使用をスキップします。

私はハッシュではなく暗号化を意味しました!

必要なハッシュがdbms_crypto.hash()でカバーされていない場合は、dbms_crypto.encryptを介した暗号化を探している可能性があります。

  • ENCRYPT_DES
  • ENCRYPT_3DES_2KEY
  • ENCRYPT_3DES
  • ENCRYPT_AES
  • ENCRYPT_PBE_MD5DES
  • ENCRYPT_AES128
  • ENCRYPT_AES192
  • ENCRYPT_AES256

以下は、完全な DBMS_CRYPTOに関する11gR2のドキュメント です。他のすべてのバージョンは tahiti.Oracle.com から入手できます。バージョンをクリックして、「dbms_crypto」を検索してください。

38
Andrew Martinez