1
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

4

1 に答える 1

0

以下は、hash() を使用して dbms_crypto 経由で機能するはずです。

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 は raw 形式になります。UTL_RAW を使用して、別のデータ型に変換できます。ディスプレイに適切な文字セットが表示されていることを確認してください。そうしないと、見た目が面白くなります。

于 2012-06-18T17:01:36.040 に答える