2012-06-17 8 views
14

可能性の重複:
Is there any hash function in PL/SQL?Oracleにはハッシュ関数が組み込まれていますか?

私は、Oracle 11gのNCLOBデータベース型の列を持っています。そのコンテンツのハッシュ値を取得する必要があります。 Oracleの組み込みOracleファンクションまたはPL/SQL SPの内部でこれを実行するにはどうすればよいですか?

+0

dbms_crypto.hash http://docs.oracle.com/cd/E11882_01/appdev.112/e25788/d_crypto.htm#ARPLS65700を参照してください。私はNCLOBを取るバージョンは見当たりません。すべての場合に 'src IN CLOB CHARACTER SET ANY_CS'がどのようにしてNCLOBを失うことなく受け取ることができないのか分かりません。調査する何か。 –

+0

この質問は* exact * duplicateではありません。 NCLOBまたはVARCHAR2のハッシングには、微妙ではあるが重要な違いがあります。具体的には、ORA_HASHを使用すると、NCLOBのハッシングが確定的でない可能性があります。そのため、他の質問に対する回答の1つが適切でない可能性があります。決定論的ハッシュについての情報は私の答えを参照してください:http://stackoverflow.com/a/9476696/409172 –

答えて

38

はい:ハッシングと暗号化(関連していますが完全に一致しているわけではありません)は、すべて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の概要()

ハッシュ()関数がオーバーロードされ次のタイプを受け入れる:RAW、BLOB、a CLOB。 RAW、CHAR、VARCHAR2、NCHAR、NVARCHAR2、LONG、BLOBは、RAW、CHAR、およびVARCHAR2です。 RAW /暗黙のRAW変換、BLOB、およびCLOBで扱われない他のすべてのデータ型(DATE、TIMESTAMPなど)は、まずTO_CHAR()を介して渡されなければなりません。

それは(そのDBMS_CRYPTO.HASHを注目する価値がある)は、以下のハッシュアルゴリズムをサポートしています。

  • HASH_MD4
  • HASH_MD5
  • HASH_SH1

パスワード:念

パスワードを保存している場合は、暗号化ハッシュ(md5、sha-1など)の代わりにパスワードストレージハッシュ(bcrypt、PBKDF2、またはscrypt)を使用することをお勧めします。違いは、パスワード保存ハッシュは時間がかかることを意味し、暗号ハッシュはすぐに実行されることを意味します。ブルートフォースでシステムのパスワードリストを攻撃すると、暗号化アルゴリズムを通過する塩分値を破るときに、より集中的に時間がかかります。 1つの値にパスワードハッシュを使用すると、100ミリ秒かかることがあると考えていますが、パスワードリスト全体に対して無差別に(パスワードごとに何百万/何十億回の試行があっても)非常に遅いと考えてください。

オラクルは、私はパスワードハッシュのサポートを提供するOracleのすべてのパッケージを認識していないです何の価値について

をハッシュパスワードを嫌っています。ただし、これを実現するには、 'loadjava'を使用し、Javaのbcrypt実装をOracleのRDBMSで動作するJVM内に配置します。 PL/SQL wrapperを使用して、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
  • ここでは0
  • ENCRYPT_AES128
  • ENCRYPT_AES192
  • ENCRYPT_AES256

いっぱい11gR2 documentation on DBMS_CRYPTOです。その他のバージョンはtahiti.oracle.comから入手できます。あなたのバージョンをクリックし、 'dbms_crypto'を検索してください。

+0

重複した質問で受け入れられた答えよりも良い答えです。コード例と詳細、およびガイドへのリンク。 –

+0

OTOH、本当に-1の価値があるのは、パスワードを保存するために暗号化ではなく塩+パスワードの暗号化ハッシュを使用するのが一般的です(パスワードを抽出する必要がない限り、恐ろしいです)。http://を参照してください。 –

+0

@ShannonSeverance私は、専門家である人物に物品を結びつけるよりも、その点をもっと知的に論じることはできません。私の謝罪を受け入れてください。あなたがこの問題についての考えを持っているなら、私はいつも新しいアイデアを聞くためにオープンしています。私は、無制限の暗号化アルゴリズムと無制限のハッシュアルゴリズムの両方が可逆的であるという現在の仮定を無効にしています。ハッシュは、誰かがそれを逆転するまで片方向ですが、長くはありません。その点を考慮して、それらについて何が違うかを考えてください。 http://krebsonsecurity.com/2012/06/how-companies-can-beef-up-password-security/ –

関連する問題