データベースのパスワード列を暗号化したいのですが、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"
定数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
上記の答えは問題ありません。4353に関する情報をいくつか追加します。このリクエストがそのまま使用されているのを見て、この値が実際には理解されていないことに気付きました。
4353は、使用される暗号化(des、aes)に関する3つの情報の追加です。など)、ブロック暗号操作モード(ecbまたはcbc)およびパディングモード。
したがって、4353は1(des)+ cbcモード(256)+ pkcs5パディング(4096)を表します
aes 256を使用する場合は、4356を使用する必要があります。
4358はaes 128の略です
等々。
さまざまなパラメータについて説明しているOracleページは ここ です。
この追加情報が、すべての人の理解を深めるのに役立つことを願っていますDBMS_CRYPTO。
暗号化
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;