Oracle到YashanDB适配:dbms_obfuscation_toolkit的平滑迁移

news/2026/1/26 23:48:06/文章来源:https://www.cnblogs.com/www-htz-pw/p/19535892

我们的文章会在微信公众号IT民工的龙马人生和博客网站 ( www.htz.pw )同步更新 ,欢迎关注收藏,也欢迎大家转载,但是请在文章开始地方标注文章出处,谢谢!
由于博客中有大量代码,通过页面浏览效果更佳。

1.1 前言

在数据库国产化迁移的过程中,安全能力的对标成熟商业数据库与核心逻辑的平滑过渡到YashanDB是关键环节。Oracle 早期版本常使用 dbms_obfuscation_toolkit 进行基础加密,但是在后期Oracle dbms_obfuscation_toolkit列为过期组件。但在现代国产数据库研发(如 YashanDB)中,为了获得更强的算法支持和更标准化的接口,通常只适配了 DBMS_CRYPTO ,这就涉及到需要将 dbms_obfuscation_toolkit改写为DBMS_CRYPTO

本文将详细展示如何将一个基于 DES 算法的解密函数从旧有的 Oracle Toolkit 模式迁移至 Oracle的DBMS_CRYPTO 模式,在平滑的迁移到YashanDB 兼容的 DBMS_CRYPTO 模式,并分享验证一致性的最佳实践。


1.2 现状分析:Oracle 原始逻辑

在 Oracle 早期遗留系统中,解密逻辑通常如下所示。该方法直接处理 VARCHAR2 类型,且对 DES 块对齐的要求较为隐蔽。
原始代码如下:

-- 原始基于 dbms_obfuscation_toolkit 的代码
CREATE OR REPLACE FUNCTION "HTZ"."DECRYPT_DES" (p_text VARCHAR
)
RETURN VARCHAR
IS
v_text VARCHAR(2000);
BEGINIF p_text IS NULL OR p_text = '' THEN  RETURN p_text;END IF ;dbms_obfuscation_toolkit.DESDECRYPT(input_string => UTL_RAW.CAST_TO_varchar2(p_text), key_string => 'huangtin', decrypted_string => v_text);v_text := rtrim(v_text, chr(0));RETURN v_text;
EXCEPTIONWHEN others THEN RETURN p_text;
END;
/

1.3 演进与适配:改写为 DBMS_CRYPTO 模式

YashanDB 高度兼容 Oracle 的系统包,所以我们现在Oracle数据库中将代码修改为DBMS_CRYPTO。改写为 DBMS_CRYPTO 能够提供更明确的填充模式控制。以下代码展示了如何通过定义 v_typ(DES + CBC模式 + 无填充)来精准模拟原始逻辑。

CREATE OR REPLACE FUNCTION "HTZ"."DECRYPT_DES" (p_text IN VARCHAR2
)
RETURN VARCHAR2
ISv_ret          RAW(2000);v_key          RAW(8);v_input        RAW(2000);v_decrypted    VARCHAR2(2000);-- DES + CBC + No Padding (精确匹配原始逻辑,手动处理补齐)v_typ          PLS_INTEGER := DBMS_CRYPTO.ENCRYPT_DES + DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_NONE;
BEGIN-- 1. 处理空值输入IF p_text IS NULL THEN RETURN p_text;END IF;-- 2. 准备密钥与输入 (强制使用 RAW 类型确保字节级安全)v_key   := UTL_RAW.CAST_TO_RAW('huangtin');v_input := UTL_RAW.CAST_TO_RAW(p_text);-- 3. 调用 DBMS_CRYPTO 进行解密v_ret := DBMS_CRYPTO.DECRYPT(src => v_input,typ => v_typ,key => v_key);-- 4. 转换回字符串并去除末尾的 CHR(0) 填充v_decrypted := UTL_RAW.CAST_TO_VARCHAR2(v_ret);v_decrypted := RTRIM(v_decrypted, CHR(0));RETURN v_decrypted;EXCEPTIONWHEN OTHERS THEN-- 遵循原始需求,报错时返回原文本RETURN p_text;
END;
/

1.4 兼容性验证:确保逻辑闭环

在正式迁移到 YashanDB 之前,我们需要在 Oracle 环境中通过“新旧对比测试”验证改写后的函数是否能正确解密由旧包产生的数据。

1.4.1 场景一:模拟旧数据解密验证

由于 DES 要求输入必须是 8 的倍数,我们在测试中对不足 8 位的 huanghtz 进行了补齐处理。

SET SERVEROUTPUT ON;DECLAREv_raw_text      VARCHAR2(100) := 'huanghtz'; v_key           VARCHAR2(20)  := 'huangtin';v_padded_text   VARCHAR2(100);v_encrypted_str VARCHAR2(2000);v_decrypted_new VARCHAR2(2000);-- 模拟老方法加密逻辑PROCEDURE mock_old_encrypt(p_in IN VARCHAR2, p_out OUT VARCHAR2) ISBEGINv_padded_text := RPAD(p_in, 8, CHR(0));DBMS_OBFUSCATION_TOOLKIT.DESENCRYPT(input_string     => v_padded_text,key_string       => v_key,encrypted_string => p_out);END;BEGINDBMS_OUTPUT.PUT_LINE('--- Testing String: ' || v_raw_text || ' ---');-- Step A: 旧包加密mock_old_encrypt(v_raw_text, v_encrypted_str);DBMS_OUTPUT.PUT_LINE('Step 1: Encrypted String (Hex): ' || UTL_RAW.CAST_TO_RAW(v_encrypted_str));-- Step B: 新函数解密v_decrypted_new := "HTZ"."DECRYPT_DES"(v_encrypted_str);-- Step C: 结果比对DBMS_OUTPUT.PUT_LINE('Step 2: Decrypted Result: ' || v_decrypted_new);IF v_decrypted_new = v_raw_text THENDBMS_OUTPUT.PUT_LINE('SUCCESS: The new method matches the old logic.');ELSEDBMS_OUTPUT.PUT_LINE('FAILURE: Results do not match.');END IF;
END;
/

1.5 迁移 YashanDB 后的生产验证

将上述 DECRYPT_DES 函数迁移至 YashanDB 后,我们使用 YashanDB 原生的 DBMS_CRYPTO 能力进行最终验证。

1.5.1 场景二:YashanDB 环境内独立验证

SET SERVEROUTPUT ON;DECLAREv_original_plain  VARCHAR2(100) := 'huanghtz'; v_encryption_key  VARCHAR2(20)  := 'huangtin';v_encrypted_raw   RAW(2000);v_encrypted_char  VARCHAR2(2000);v_decrypted_final VARCHAR2(2000);
BEGIN-- 1. 在 YashanDB 中模拟生成标准 DES 加密数据v_encrypted_raw := DBMS_CRYPTO.ENCRYPT(src => UTL_RAW.CAST_TO_RAW(v_original_plain),typ => DBMS_CRYPTO.ENCRYPT_DES + DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_NONE,key => UTL_RAW.CAST_TO_RAW(v_encryption_key));v_encrypted_char := UTL_RAW.CAST_TO_VARCHAR2(v_encrypted_raw);-- 2. 调用迁移后的解密函数v_decrypted_final := "HTZ"."DECRYPT_DES"(v_encrypted_char);-- 3. 验证输出DBMS_OUTPUT.PUT_LINE('--- Function Verification in YashanDB ---');DBMS_OUTPUT.PUT_LINE('Original Text: ' || v_original_plain);DBMS_OUTPUT.PUT_LINE('Function Output: ' || v_decrypted_final);IF v_decrypted_final = v_original_plain THENDBMS_OUTPUT.PUT_LINE('RESULT: SUCCESS');ELSEDBMS_OUTPUT.PUT_LINE('RESULT: FAILED');END IF;
END;
/

1.6 总结与建议

  1. 权限控制:在 YashanDB 中编译该函数前,务必确保 HTZ 用户已被显式授予权限:GRANT EXECUTE ON DBMS_CRYPTO TO HTZ;
  2. RAW 类型的重要性:从 Oracle 迁移到 YashanDB 时,应尽量将加密数据存储为 RAW 。如果必须以 VARCHAR2 存储,需格外注意字符集对不可见字符的影响。
  3. 算法演进:DES 算法在安全性上已逐渐被 AES 取代。在完成平滑迁移后,建议后续考虑将业务中的解密算法升级为 AES-256

通过上述改写流程,我们不仅成功实现了 Oracle 到 YashanDB 的逻辑迁移,更将底层的安全组件升级到了更可靠的 DBMS_CRYPTO 架构。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1221300.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue3 - 01 路由的配置和使用

element-plus 官网组件 https://element-plus.org/zh-CN/component/overview路由的配置和使用 1 安装npm install vue-router@next --save1.1创建相关页面2 配置路由 index.tsimport {createRouter,createWebHistory} …

2026年中国十大热门辣味零食推荐排行榜(附详细榜单)

前言 2026年中国十大热门辣味休闲食品品牌分别为:辣人辣椒酥(旺旺子品牌)、卫龙、麻辣王子、盐津铺子、劲仔小鱼、良品铺子、三只松鼠、王小卤、来伊份、阿宽食品。2025年,中国辣味休闲食品市场持续升温,行业规模…

导师推荐!9大AI论文网站测评:研究生开题报告必备工具

导师推荐!9大AI论文网站测评:研究生开题报告必备工具 学术写作工具测评:为何需要一份权威榜单? 随着AI技术在学术领域的广泛应用,越来越多的研究生开始依赖AI工具提升论文写作效率。然而,面对市场上琳琅满目…

【2026最新整合】C盘满了怎么清理?c盘瘦身只需这些简单步骤!

电脑用着用着就开始变卡、系统更新失败、甚至提示"磁盘空间不足"? 其实这都是因为——C盘太满了! C盘是系统盘,承载着Windows系统文件、临时缓存、更新补丁、用户数据等内容,一旦空间不足,就会导致运行缓慢…

Agent课题增长200% AICA第九期毕业并累计输送569名AI架构师

1月22日,由百度与深度学习技术及应用国家工程研究中心联合发起的AICA首席AI架构师培养计划(以下简称“AICA”)第九期毕业典礼在上海成功举办。经过为期8个月的实战培养,来自能源、制造、金融、交通、汽车等18个行业领域的80名学员…

告别手残 + 突破内网!Excalidraw和cpolar 让创意协作无边界

🎁个人主页:User_芊芊君子 🎉欢迎大家点赞👍评论📝收藏⭐文章 🔍系列专栏:AI 文章目录: 这么好的组合赶紧去安装吧,教程如下👇 1. 安装Docker2. 使用Docker拉…

github上传项目

sudo apt-get install git cd "/media/liangxinyu/Elements SE/MMKGRLib" git init git add . git commit -m "第一次提交代码" git branch -M main git push -f origin main

基于微信小程序的培训咨询平台【源码+文档+调试】

🔥🔥作者: 米罗老师 🔥🔥个人简介:混迹java圈十余年,精通Java、小程序、数据库等。 🔥🔥各类成品Java毕设 。javaweb,ssm,springboot等项目&#…

救命神器10个AI论文平台,专科生毕业论文救星!

救命神器10个AI论文平台,专科生毕业论文救星! AI工具助力论文写作,专科生也能轻松应对 随着人工智能技术的不断发展,AI工具已经逐渐成为学术写作中不可或缺的助手。对于许多专科生来说,撰写毕业论文是一项既复杂又耗…

全球股市估值与可持续城市垂直农业的关系

全球股市估值与可持续城市垂直农业的关系 关键词:全球股市估值、可持续城市垂直农业、经济关联、市场趋势、投资分析、农业发展、金融市场 摘要:本文旨在深入探讨全球股市估值与可持续城市垂直农业之间的关系。首先介绍了研究的背景、目的、预期读者等内容。接着阐述了核心概…

随时随地听书:在极空间部署 Audiobookshelf 并结合 cpolar 实现私有云听书

文章目录这简直就是了不起的随身搭子啊,私有、专属、无广、多设备、无缝续听!看到这还不快去按照下面的教程走一波!1.在极空间部署Audiobookshelf1.1ssh远程连接到极空间1.2验证docker是否开启1.3安装Audiobookshelf1.4简单使用Audiobookshel…

Excel HLOOKUP函数深度解析:水平查询与交叉匹配的完美结合

在Excel查找函数家族中,大家熟知VLOOKUP的垂直查找,但它的“兄弟”HLOOKUP却常被忽略。实际上,当数据按水平方向排列时,HLOOKUP是无可替代的利器。本文将深入探讨HLOOKUP函数,并展示如何与VLOOKUP强强联合,…

春节前北京老酒回收旺季来临 正规机构如何守护藏家权益

“家里存了几瓶年份茅台,想趁节前变现,却怕遇到调包、压价的坑。”随着2026年春节临近,北京老酒回收市场进入交易高峰,飞天茅台、五粮液等名酒回收价稳步上涨,不少市民和藏家面临变现难题。记者走访发现,当前市场…

RISC-V ISA

目录RISC-V ISAISA基本介绍RISC-V ISARISC-V特点命名规范增量ISA模块ISA基本整数(Integer)指令集扩展模块指令集通用寄存器(General Purpose Registers)HART特权级别(Privileged Level)Control and Status Regis…

可能解决天堂2-6章铁幕降临长时间游戏FPS降低,内存占用高,卡死的方法

作者:Henrique S 简译:杀气丶 简介: 你打开了游戏,它运行得很平稳,但在打开了一段时间后,它会变得“沉重”,消耗了大量的内存RAM,然后挂起,直到不得不再次关闭并重新打…

4G通信模组和引擎应该怎么用?

在物联网与智能终端设备开发中,4G通信模组与主控引擎(如MCU或应用处理器)的协同工作是实现远程数据传输与设备联网的核心环节。正确配置通信接口、管理AT指令交互、处理数据收发流程,是确保稳定联网的关键。本文将系统讲解4G模组与…

快速上手Mobile库:几行代码搞定移动通信

在面向物联网的移动通信技术中,4G-Cat.1凭借其在性能、功耗与成本之间的优异平衡,已成为中低速连接场景的主流选择。LuatOS提供了Mobile核心库,帮助开发者高效管理设备通信。该库提供简洁易用的API接口,涵盖网络连接、状态监控与高…

掌握Air780EHV核心板的OTP核心库API的用法

Air780EHV核心板集成的OTP核心库API,为开发者提供了对OTP存储区进行数据管理的能力。通过该API,可实现数据写入、内容读取以及在特定策略下的擦除操作。尽管OTP具有不可逆性,但API层的逻辑封装保障了操作的安全性与可追溯性,是关键…

构建LCD从硬件到UI的高效开发全流程

LCD开发不再仅仅是驱动屏幕点亮或绘制界面的孤立任务,而是涵盖硬件选型、接口配置、驱动移植、图形渲染与UI交互的系统工程。唯有打通从底层硬件到上层用户界面的完整链路,才能实现真正的高效开发。本文将系统阐述如何构建一体化开发流程,提升…

亲测好用!继续教育8款一键生成论文工具测评

亲测好用!继续教育8款一键生成论文工具测评 2026年继续教育论文写作工具测评:功能与效率的深度解析 随着继续教育群体对学术成果要求的不断提升,论文写作成为许多学员必须面对的挑战。传统的写作方式耗时费力,而AI写作工具的兴起为…