sql >> データベース >  >> RDS >> Oracle

Java 6関数はコマンドラインで機能しますが、Oracleサーバーでは機能しません(AES 256)

    暗号化を行うために独自のJavaコードを作成する代わりに、 DBMS_CRYPTO パッケージ。 AES/ECB/PKCS5Paddingをサポートします 暗号化の場合、暗号化/復号化関数を呼び出すときに適切な「タイプ」を設定する必要があります。以下は、ドキュメントの同じ例ですが、暗号化タイプがJavaコードで使用しているものに変更されています。

    DECLARE
        input_string      VARCHAR2 (200) := 'Secret Message';
        output_string     VARCHAR2 (200);
        encrypted_raw     RAW (2000);              -- stores encrypted binary text
        decrypted_raw     RAW (2000);              -- stores decrypted binary text
        num_key_bytes     NUMBER := 256 / 8;       -- key length 256 bits (32 bytes)
        key_bytes_raw     RAW (32);                -- stores 256-bit encryption key
        encryption_type   PLS_INTEGER
            :=                                     -- total encryption type
               DBMS_CRYPTO.ENCRYPT_AES256 + DBMS_CRYPTO.CHAIN_ECB + DBMS_CRYPTO.PAD_PKCS5;
        iv_raw            RAW (16);
    BEGIN
        DBMS_OUTPUT.PUT_LINE ('Original string: ' || input_string);
        key_bytes_raw := DBMS_CRYPTO.RANDOMBYTES (num_key_bytes);
        iv_raw := DBMS_CRYPTO.RANDOMBYTES (16);
        encrypted_raw :=
            DBMS_CRYPTO.ENCRYPT (src   => UTL_I18N.STRING_TO_RAW (input_string, 'AL32UTF8'),
                                 typ   => encryption_type,
                                 key   => key_bytes_raw,
                                 iv    => iv_raw);
        -- The encrypted value "encrypted_raw" can be used here
    
        decrypted_raw :=
            DBMS_CRYPTO.DECRYPT (src   => encrypted_raw,
                                 typ   => encryption_type,
                                 key   => key_bytes_raw,
                                 iv    => iv_raw);
        output_string := UTL_I18N.RAW_TO_CHAR (decrypted_raw, 'AL32UTF8');
    
        DBMS_OUTPUT.PUT_LINE ('Decrypted string: ' || output_string);
    END;
    /
    



    1. SQLiteでワードラップを有効にする2つの方法

    2. ProxySQL2.0の新機能

    3. 2 つのカウントを取得して分割する

    4. foreachループを使用して複数のフィールドを挿入します