当前位置: 首页 > 知识库问答 >
问题:

使用DBMS_CRYPTO但使用DBMS_混淆工具时出错

金霄
2023-03-14

捕获的SQLExc0019:: java.html" target="_blank">sql.SQLExc0019: ORA-29532:Java调用终止由未捕获Java异常:java.sql.SQLExc0019:未能获得服务器访问帐户详细信息: ORA-28817: PL/SQL函数返回错误。

ORA-06512:在"SYS.DBMS_CRYPTO_FFI",第67行

ORA-06512:“SYS.DBMS_CRYPTO”,第44行

ORA-06512:在"NM. CIPher",第41行

ORA-06512:在"NM.DEVICE_ACCOUNT",第176行

ORA-06512:在第1行

ORA-06512:在"NM.DEVICE_PROCEDURES",第8行

ORA-06512:在第1行

create or replace PACKAGE BODY CIPHER IS
seven_bytes RAW(7) := HEXTORAW ('00000000000000');

FUNCTION    make_8_bytes (  p_string    IN  RAW ) RETURN RAW IS
    v_length    PLS_INTEGER := MOD(utl_raw.length (p_string),8);
BEGIN
    IF v_length = 0 THEN
        RETURN p_string;
    ELSE
        RETURN utl_raw.concat (p_string,utl_raw.substr(seven_bytes,1,8-v_length));
    END IF;
END;




FUNCTION    encrypt (   p_string    IN  VARCHAR2,
                                        p_key   IN  RAW  ) RETURN RAW IS
    encrypted_raw   RAW(2048);
    l_mod number := dbms_crypto.ENCRYPT_DES
                    + dbms_crypto.CHAIN_CBC
                    + dbms_crypto.PAD_PKCS5;

BEGIN
    --dbms_obfuscation_toolkit.DESEncrypt(input => make_8_bytes (utl_raw.cast_to_raw(p_string)),key => make_8_bytes (p_key), encrypted_data => encrypted_raw );
      encrypted_raw:= dbms_crypto.encrypt(src => make_8_bytes (utl_raw.cast_to_raw(p_string)),typ => l_mod, key => make_8_bytes (p_key));

    RETURN  encrypted_raw;
    
     EXCEPTION                
       WHEN OTHERS THEN 
                v_errm:=SUBSTR(SQLERRM,1,200);
END;


FUNCTION    decrypt (   p_string    IN  RAW,
                                        p_key   IN  RAW  ) RETURN VARCHAR2 IS
    decrypted_raw   RAW(2048);
    l_ret varchar2 (2000);
    l_mod number := dbms_crypto.ENCRYPT_DES
                    + dbms_crypto.CHAIN_CBC
                    + dbms_crypto.PAD_PKCS5;

BEGIN
       -- dbms_obfuscation_toolkit.DESDecrypt(input => p_string,key => make_8_bytes (p_key), decrypted_data => decrypted_raw );
        decrypted_raw:= dbms_crypto.Decrypt(src => p_string,typ => l_mod,key => make_8_bytes (p_key));
        l_ret:= UTL_I18N.RAW_TO_CHAR(decrypted_raw, 'AL32UTF8');
        RETURN l_ret;
    --RETURN rtrim(utl_raw.cast_to_varchar2(decrypted_raw),chr(0));
    
     EXCEPTION                
       WHEN OTHERS THEN 
                v_errm:=SUBSTR(SQLERRM,1,200);
END;
END CIPHER;
 

共有2个答案

蒲功
2023-03-14

当我使用UTL_RAW转换为RAW时,我有时会得到同样的错误。这取决于价值。

关于ORA-06512:at“SYS.DBMS\u CRYPTO\u FFI”,第67行-错误Oracle支持建议仅使用RAWTOHEXUTL\u编码。BASE64_ENCODE函数用于传递值以进行解密或存储。分别为HEXTORAWUTL\u编码。BASE64_解码

郑安晏
2023-03-14

我试了你的代码,结果是肯定的。

使用不同的密钥进行加密和解密时引发错误。

请参见下面的示例:

用于加密和解密的相同密钥:

SELECT
    CIPHER.DECRYPT(CIPHER.ENCRYPT('stackoverflow', UTL_RAW.CAST_TO_RAW('123')), UTL_RAW.CAST_TO_RAW('123'))
FROM
    DUAL;

用于加密和解密的不同密钥:

SELECT
    CIPHER.DECRYPT(CIPHER.ENCRYPT('stackoverflow', UTL_RAW.CAST_TO_RAW('123')), UTL_RAW.CAST_TO_RAW('1234'))
FROM
    DUAL;
 类似资料:
  • 我的任务是完成以下两个Oracle函数: 将CLOB作为输入,并使用AES-256对其进行加密,然后返回加密的CLOB 将加密的CLOB作为输入,使用AES-256对其解密并返回解密的CLOB 它抛出的错误是: ORA-06502:PL/SQL:数值或值错误:十六进制到原始转换错误 ORA-06512:在“sn_pre_stage_415.f_decrypt_clob”,第33行 06502。00

  • 在序列化/反序列化过程中,我的项目在中实现了一个,用于保留对象的多态性状态。不管怎样,该项目在开发测试中工作得很好,但当它用proguard混淆发布并测试时,它就崩溃了。 我的Gson特定的proguard配置是: 我正在使用的打字适配器是: 任何来自开发者社区的帮助都将不胜感激。

  • 问题内容: 我在AndroidStudio 1.2.1.1和Gradle 1.2.3中使用了ProGuard。 My Gradle的发布版本的配置如下: 我希望混淆类的私有字段。 到目前为止,这是我的proguard配置文件(经过多次尝试): 但是在从AndroidGuard 反编译后,我最终得到了: 我知道这种混淆的使用是有限的,但是我想由ProGuard重命名。怎么做? 这是refcard。

  • 3.4.4 使用混淆 自从 Gradle plugin for ProGuard 4.10 版本以后,Gradle 开始支持混淆。如果通过 Build Type 的 minifyEnabled 属性配置了使用混淆后,The ProGuard plugin 会自动被应用,并且自动创建一些任务。 android { buildTypes { release {

  • 问题内容: 是否有对Java混淆代码进行反混淆的工具? 这些代码是从编译的类中提取的,但是它们被混淆并且不可读。 问题答案: 您是否尝试过使用Java Deobfuscator(又名JDO) (一种智能反编译器)来减少代码的晦涩感? 目前,JDO执行以下操作: 将混淆的方法,变量,常量和类名重命名为唯一的,并更能指示其类型 在整个源代码树(测试版)中传播更改 具有易于使用的GUI 允许您指定字段,

  • 我试图在java中使用JAXB将XML文件解压到生成的类结构中。我遇到了一个令人困惑的问题,我将类加载器交给显然无法找到实例化架构类所需的一些类,但当我手动搜索提供的classLoader以查找所需的类时,它们就在那里: 方法只创建一个新的URLClassLoader,加载生成的类所需的一些特定的罐,然后将系统类加载器设置为父类。生成的类使用一些我放在类加载器中的postgresql库,这是我遇到