Oracle dbms_crypto加密/解密函数不起作用

时间:2018-06-01 08:08:29

标签: oracle encryption

当我使用dbms_crypto时,生产环境会有不同的结果 加密/解密oracle,该功能在其他环境中运行良好。

create or replace PACKAGE BODY GEN_PAQ_ENCRIPTA_EXP AS

  juego_carac VARCHAR(8) := 'AL32UTF8';
  raw_vector RAW(128)    := hextoraw('xxxxxxxxx');
  raw_key RAW(128)       := hextoraw('xxxxxxxxx'); 
  encryption_mode NUMBER := SYS.DBMS_CRYPTO.ENCRYPT_AES256 + SYS.DBMS_CRYPTO.CHAIN_CBC + SYS.DBMS_CRYPTO.PAD_PKCS5;

  FUNCTION EncriptaBlob(Param1 IN BLOB) RETURN BLOB IS
    salida BLOB;
    duratempo INTEGER := sys.dbms_lob.CALL;

    BEGIN
        IF Param1 IS NULL THEN
            RETURN NULL;
        END IF;
        sys.dbms_lob.createtemporary(salida, TRUE,duratempo);
        sys.dbms_crypto.Encrypt(salida, Param1, encryption_mode, raw_key, raw_vector);

        return salida;

    EXCEPTION
        WHEN NO_DATA_FOUND THEN
            NULL;
        WHEN OTHERS THEN
            RAISE;
  END EncriptaBlob;


  FUNCTION DesEncriptaBlob(Param1 IN BLOB) RETURN BLOB IS
    salida BLOB;
    duratempo INTEGER := sys.dbms_lob.CALL;

    BEGIN
        IF Param1 IS NULL THEN
            RETURN NULL;
        END IF;
        sys.dbms_lob.createtemporary(salida, TRUE,duratempo);
        sys.dbms_crypto.Decrypt(salida, Param1, encryption_mode, raw_key, raw_vector);

        return salida;
    EXCEPTION
        WHEN NO_DATA_FOUND THEN
            NULL;
        WHEN OTHERS THEN
            RAISE;

  END DesEncriptaBlob;

END GEN_PAQ_ENCRIPTA_EXP;

参数' Param1'是base64中的pdf文件,大小约为150000字节。 参数' salida'当我调用encrypt和decrypt返回这个pdf base64但是有16个额外字符(方字符Byte = 16)时,这只在生产数据库环境中。

我很困惑,欢迎任何帮助。

0 个答案:

没有答案