はい:ハッシュと暗号化(関連していますが、まったく同じではありません)はすべて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ミリ秒かかる可能性がありますが(1回の本物のログインではそれほど多くありません)、パスワードリスト全体でブルートフォース(パスワードあたり数百万/数十億回の試行)には非常に時間がかかることを考慮してください。
Oracleはパスワードハッシュを嫌う
その価値について、私はパスワードハッシュサポートを提供するOracleのパッケージを知りません。ただし、これは「 loadjava 'そして、OracleのRDBMSで実行されるJVM内にJavabcrypt実装を配置します。その後、 PL/SQLラッパーを使用できます。 a> bcryptを実装するJavaクラスを呼び出します。中間層を使用している場合は、その言語で利用できる他の多くのオプション(.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」を検索してください。