web-dev-qa-db-ja.com

OracleでDBMS_CRYPTO.encrypt関数を使用する方法

データベースのパスワード列を暗号化したいのですが、DBMS_CRYPTOパッケージ内にある暗号化機能を使用しようとしています(sysアカウントから現在のユーザーに実行アクセス権を与えています)が、次のエラーが発生します。この関数の使用方法の例をいくつか教えてください。

select DBMS_CRYPTO.encrypt('12345', dbms_crypto.DES_CBC_PKCS5, 'A1') from dual;

エラー:

ORA-06553:PLS-221: 'DES_CBC_PKCS5'はプロシージャではないか、未定義です06553。00000- "PLS-%s:%s"

5
ITQuest

定数dbms_crypto.DES_CBC_PKCS5は、SQLからではなくPL/SQLでのみ参照可能です。

SELECTステートメントでリテラル値に置き換える必要があります。

値を取得するには、PL/SQLブロックを使用します

 begin
   dbms_output.put_line(dbms_crypto.DES_CBC_PKCS5);
 end;
 /

 4353

また、より長いキーを使用する必要があります

 select DBMS_CRYPTO.encrypt(UTL_RAW.CAST_TO_RAW ('ABCDEFGH12345'), 4353 /* = dbms_crypto.DES_CBC_PKCS5 */, 'A1A2A3A4A5A6CAFE') from dual;

 9320CBCBD25E8721BD04990A0EAEAF00
4
Marmite Bomber

上記の答えは問題ありません。4353に関する情報をいくつか追加します。このリクエストがそのまま使用されているのを見て、この値が実際には理解されていないことに気付きました。

4353は、使用される暗号化(des、aes)に関する3つの情報の追加です。など)、ブロック暗号操作モード(ecbまたはcbc)およびパディングモード

したがって、4353は1(des)+ cbcモード(256)+ pkcs5パディング(4096)を表します

aes 256を使用する場合は、4356を使用する必要があります。

4358aes 128の略です

等々。

さまざまなパラメータについて説明しているOracleページは ここ です。

この追加情報が、すべての人の理解を深めるのに役立つことを願っていますDBMS_CRYPTO

2
Plaute

暗号化

select DBMS_CRYPTO.encrypt(UTL_RAW.CAST_TO_RAW('ABCDEFGH12345'), 4353 /* = dbms_crypto.DES_CBC_PKCS5 */, UTL_RAW.CAST_TO_RAW ('A1A2A3A4A5A6CAFE')) from dual;

復号化

select UTL_RAW.CAST_TO_varchar2(DBMS_CRYPTO.decrypt('80AA4DEA59B77C433A2142AE9CDD235A', 4353, UTL_RAW.CAST_TO_RAW ('A1A2A3A4A5A6CAFE'))) from dual;
0
Calebe Santos