SHA-512 на Oracle - PullRequest
       48

SHA-512 на Oracle

0 голосов
/ 04 декабря 2018

Я хочу зашифровать некоторые данные с помощью SHA-512 в Oracle 12.

Например, я хотел бы зашифровать эту строку:

230049008251111 

до этого:

DA9AA3ACDE64DB3297FF75FDE407DAF3DB7EFF0CDF987C6C16BAF28242997046997EBF5A2F6C4F7449A4936C6518A6FD24A3C0984E9C09BF19395175F1BE2B5F

Это в соответствии с sha512 generator Я использую.Каков наилучший способ сделать это на Oracle?

Спасибо

1 Ответ

0 голосов
/ 04 декабря 2018

Oracle имеет встроенную поддержку базы данных для SHA-512.

Если вам нужно решение для чистого SQL и ваша входная строка находится в пределах ограничения длины строки SQL (4000 символов, если вы не включили 12cрасширенная семантика varchar2) вы можете сделать это:

select standard_hash ( '230049008251111', 'SHA512')
from dual
/

Если у вас более длинные строки, Oracle предоставляет пакет DBMS_CRYPTO (не путать с устаревшей DBMS_CRYPTO_TOOLKIT).Вы можете использовать это так ...

declare
     str clob;
     hsh raw(64);
begin      
     str := '230049008251111';
     hsh := dbms_crypto.hash (str, dbms_crypto.HASH_SH512);
     dbms_output.put_line(hsh);
end;
/

... или что-то еще, что имеет смысл для вашего приложения.Есть три варианта dbms_crypto.hash(), которые принимают BLOB, CLOB и RAW.Нет варианта для старого доброго varchar2.Не уверен почему. Узнайте больше .

Оба этих вызова выдают один и тот же результат (как можно было бы надеяться):

DA9AA3ACDE64DB3297FF75FDE407DAF3DB7EFF0CDF987C6C16BAF28242997046997EBF5A2F6C4F7449A4936C6518A6FD24A3C0984E9C09BF19395175F1BE2B5F

Как отмечает @WernfriedDomscheit, выполнение по DBMS_CRYPTO не предоставляется по умолчанию.Однако STANDARD_HASH() есть.Поэтому, в зависимости от ваших требований, вам, возможно, придется обратиться к вашей команде DBA, чтобы получить необходимые привилегии.

...