Вопрос по hash, plsql, oracle – Есть ли в Oracle встроенная хэш-функция? [Дубликат]

14

Possible Duplicate:
Is there any hash function in PL/SQL?

У меня есть столбец с типом базы данных NCLOB в Oracle 11g. Мне нужно получить хеш-значение для его содержимого. Как я могу сделать это, используя любую встроенную функцию Oracle или внутри PL / SQL SP в Oracle?

Этот вопрос неexact дублировать. Есть некоторые тонкие, но существенные различия между хэшированием NCLOB или VARCHAR2. В частности, хеширование NCLOB может быть не детерминированным, если вы используете ORA_HASH, поэтому один из ответов на другой вопрос может быть неуместным. Смотрите мой ответ здесь для получения информации о детерминированном хешировании:stackoverflow.com/a/9476696/409172 Jon Heller
Смотрите dbms_crypto.hashdocs.oracle.com/cd/E11882_01/appdev.112/e25788/…, Я не вижу версию, которая принимает NCLOB, я не знаю, как, еслиsrc IN CLOB CHARACTER SET ANY_CS мог взять NCLOB без потерь во всех случаях. Что-то для расследования. Shannon Severance

Ваш Ответ

1   ответ
38

хеширование и шифрование (связанные, но не совсем одинаковые) выполняются с помощью пакета SYS DBMS_CRYPTO.

Simple SHA-1 Hashing

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

Simple MD5 Hashing

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

Overview of dbms_crypto.hash()

Функция hash () перегружена, чтобы принимать следующие типы: RAW, BLOB и CLOB. Согласнопростота преобразования данных для необработанных допустимых типов ввода: RAW, CHAR, VARCHAR2, NCHAR, NVARCHAR2, LONG, BLOB. Все другие типы данных (DATE, TIMESTAMP и т. Д.), Не охваченные RAW / неявным преобразованием RAW, BLOB и CLOB, должны будут сначала пройти через TO_CHAR ().

Стоит отметить, что dbms_crypto.hash () поддерживает следующие алгоритмы хеширования:

HASH_MD4 HASH_MD5 HASH_SH1

Passwords: Just In Case

Если вы храните пароли, я рекомендую вам использовать хэш для хранения паролей (bcrypt, PBKDF2 или scrypt) вместо криптографического хэша (md5, sha-1 и т. Д.). Разница в том, что хеши хранилища паролей должны ломаться, а криптографические хеши - быстро. При атаке на системный список паролей с помощью грубой силы он на несколько порядков более интенсивен при попытке сломать соленое значение, которое передается криптографическим алгоритмом. Учтите, что использование хэша пароля для одного значения может занять ~ 100 мс (не много для одного аутентичного входа в систему), но очень медленно для грубой силы (миллионы / миллиарды попыток на пароль) по всему списку паролей.

Oracle Hates Password Hashes

Из-за чего я не знаю ни одного пакета от Oracle, которые обеспечивают поддержку хеширования паролей. Однако вы можете сделать это, используя & apos;loadjava& APOS; и размещение реализации Java bcrypt в JVM, которая работает с СУБД Oracle. Затем вы можете использоватьОболочка PL / SQL вызвать ваш класс Java, который реализует bcrypt. Если вы используете промежуточный уровень, вы можете использовать множество других опций, доступных вам на этом языке (.NET, PHP, Perl, Ruby, Python, Java и т. Д.), И пропустить попытку использовать & apos; loadjava & apos ;.

I meant encryption not hashes!

В случае, если необходимое хеширование не охватывается dbms_crypto.hash (), вы можете искать шифрование через dbms_crypto.encrypt, которое работает очень похоже, за исключением того, что оно принимает следующие типы:

ENCRYPT_DES ENCRYPT_3DES_2KEY ENCRYPT_3DES ENCRYPT_AES ENCRYPT_PBE_MD5DES ENCRYPT_AES128 ENCRYPT_AES192 ENCRYPT_AES256

Вот полныйДокументация 11gR2 на DBMS_CRYPTO, Все остальные версии доступны черезtahiti.oracle.com, Просто нажмите на свою версию, а затем выполните поиск по запросу «dbms_crypto».

В некотором смысле это лучший ответ, чем принятый ответ в дублирующем вопросе. Примеры кода и детали, а не просто ссылка на руководство.
Ах, интересно. Я не слышал, как криптографический хэш отличается от хеша пароля. Ссылка в комментариях была хорошей. Мой комментарий был о первой версии, которая говорила использовать шифрование. Сейчас +1.
Вы не поверите дискуссии, которая зажгла на работе. Использование общих слов, таких как «шифровать»; & APOS; хэш & APOS; и «алгоритм»; когда мы сталкиваемся с подобными вещами, мы все бегаем кругами, а потом бежим к компьютерам, чтобы разобраться.
OTOH, и действительно стоит -1, как правило, каждый хочет использовать криптографический хеш соли + пароль, а не шифрование, для хранения паролей (Если вам не нужно иметь возможность извлечь пароль, но страшно.)security.stackexchange.com/questions/8945/…
@ShannonSeverance Боюсь, я не могу спорить по этому вопросу более разумно, чем связывать статью с кем-то, кто является экспертом; пожалуйста, примите мои извинения. Если у вас есть мысли по этому вопросу, я всегда открыт для новых идей. Я отрабатываю текущее предположение, что несоленые алгоритмы шифрования и несоленые алгоритмы хеширования являются обратимыми. Хэши - это один из способов, пока кто-то не перевернет их, что недолго. Имея это в виду, подумайте, что в них отличается.krebsonsecurity.com/2012/06/…

Похожие вопросы