sql >> データベース >  >> RDS >> Oracle

Oracleには組み込みのハッシュ関数がありますか?

    はい:ハッシュと暗号化(関連していますが、まったく同じではありません)はすべて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ラッパー 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」を検索してください。




    1. Windowsコマンドラインからデータベース挿入を実行することは可能ですか?

    2. SQLで重複行を削除する

    3. 複数の列に適用された順序の場合、計算された列に作用しないことによる順序

    4. 連続訪問数をカウントする