gpt4 book ai didi

Oracle10g数据库DMBS_CRYPTO错误

转载 作者:搜寻专家 更新时间:2023-10-30 23:15:55 27 4
gpt4 key购买 nike

我从 this 修改了以下源代码使用 NUMBERS 而不是 VARCHAR2 的示例。

CREATE OR REPLACE PACKAGE gen_encr
AS
FUNCTION encrypt (p_PlainText NUMBER) RETURN RAW DETERMINISTIC;
FUNCTION decrypt (p_Encrypted RAW) RETURN NUMBER DETERMINISTIC;
END;
/


CREATE OR REPLACE PACKAGE BODY gen_encr
AS
EncryptionType PLS_INTEGER := DBMS_CRYPTO.ENCRYPT_AES256
+ DBMS_CRYPTO.CHAIN_CBC
+ DBMS_CRYPTO.PAD_PKCS5;

EncryptionKey RAW (32) := UTL_RAW.cast_to_raw('ThisTextIsMyEncryptionKeyForThisPackage');

FUNCTION encrypt (p_PlainText NUMBER) RETURN RAW DETERMINISTIC
IS
encrypted_raw RAW (1024);
BEGIN
encrypted_raw := DBMS_CRYPTO.ENCRYPT
( src => UTL_RAW.CAST_FROM_NUMBER (p_PlainText),
typ => EncryptionType,
key => EncryptionKey
);
RETURN encrypted_raw;
END encrypt;

FUNCTION decrypt (p_Encrypted RAW) RETURN NUMBER DETERMINISTIC
IS
decrypt_raw RAW (1024);
BEGIN
decrypt_raw := DBMS_CRYPTO.DECRYPT
( src => p_Encrypted,
typ => EncryptionType,
key => EncryptionKey
);
RETURN (UTL_RAW.CAST_TO_NUMBER (decrypt_raw));
END decrypt;
END;
/

但是,当我运行语句 SELECT sys.gen_encr.encrypt(sal) FROM emp 时,出现以下错误。

ORA-06502: PL/SQL: numeric or value error: raw variable length too long
ORA-06512: at "SYS.GEN_ENCR", line 13

一些谷歌搜索表明错误可能是 RAW 数据类型只能接受 2000 字节。

但是,在这种情况下,我不明白为什么会出现错误。感谢您的帮助。

最佳答案

这很简单:您的 key 太长了。这是 37 个字符,您正试图将其填充到 RAW(32) 变量中。将其缩短为 32 个字符,该错误就会消失。

关于Oracle10g数据库DMBS_CRYPTO错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13786049/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com