Конвертировать NVARCHAR2 в MD5 Hash в Oracle DBMS_OBFUSCATION_TOOLKIT.MD5
DECLARE
l_string NVARCHAR2(600) := '123456';
checksum NVARCHAR2(600);
BEGIN
DBMS_OUTPUT.DISABLE;
DBMS_OUTPUT.ENABLE(1000000);
DBMS_OBFUSCATION_TOOLKIT.md5 (input_string => l_string, checksum_string => checksum);
DBMS_OUTPUT.PUT_LINE(RAWTONHEX(utl_raw.cast_to_raw(checksum)));
END;
Ожидаемое значение: e10adc3949ba59abbe56e057f20f883e
Но он возвращает: FFFD00390049FFFD0059FFFDFFFD0056FFFD000FFFFD003E
Примечание. Я хочу сохранить тип данных nvarchar2. Значение из переменной контрольной суммы сохраняется в столбце типа nvarchar2.
Мне известно, что md5 принимает и возвращает данные в varchar2. Но если кто-то может помочь мне разобраться с этим, используя тип данных nvarchar2, это было бы здорово.
NLS_CHARACTERSET = AL32UTF8
1 ответ
Следующее должно работать через dbms_crypto с использованием hash()
declare
l_src nvarchar2(100) := '123456';
l_raw_hash raw(100);
begin
l_raw_hash := dbms_crypto.hash(to_clob(l_src), dbms_crypto.HASH_MD5);
dbms_output.put_line(l_raw_hash);
end;
Результат: E10ADC3949BA59ABBE56E057F20F883E
l_raw_hash будет в необработанном формате. Вы можете использовать UTL_RAW, чтобы преобразовать его в другой тип данных. Просто убедитесь, что ваш дисплей показывает правильный набор символов, или вещь будет выглядеть интересно.