达梦数据库字段加密与模糊查询实战:安全与性能的平衡之道
1. 项目概述当数据安全遇上模糊查询在数据库应用开发中数据安全与业务便利性常常像一对难以调和的矛盾。就拿用户手机号、身份证号这类敏感信息来说直接明文存储是绝对的安全红线一旦泄露后果不堪设想。因此加密存储是必须的。但问题随之而来业务上经常需要对这些加密后的数据进行模糊查询比如根据手机号后四位查找用户或者根据身份证号中的部分信息进行匹配。如果直接对密文进行LIKE ‘%xxx%’操作结果必然是零因为加密算法如AES会彻底打乱原始数据的结构和模式。这个难题困扰过很多开发者。最近在做一个涉及用户隐私保护的项目时我再次直面了这个问题。项目使用的是达梦数据库DM8一个优秀的国产关系型数据库。经过一番探索和实践我发现利用达梦数据库提供的内置加密函数结合一些巧妙的查询策略完全可以实现在保证数据存储安全的前提下支持高效的模糊查询。这不仅仅是技术上的实现更是一种在安全与业务需求之间寻找平衡点的设计思路。接下来我就把这次实战中的核心方案、具体步骤和踩过的坑完整地分享出来。2. 核心思路与方案选型2.1 为什么选择数据库内置函数面对字段加密的需求通常有几种方案在应用层加密后存入数据库、使用数据库透明加密TDE、或者使用数据库提供的内置加密函数。应用层加密虽然灵活但模糊查询的实现会异常复杂通常需要将数据同步到额外的、未加密的检索列或者使用盲注式解密后比对性能和安全设计都面临挑战。透明加密TDE主要解决的是存储文件级别的加密对于字段级的、应用可感知的加密解密需求它并不直接提供接口。达梦数据库内置的STANDARD_ENCRYPT和STANDARD_DECRYPT函数或者更通用的DBMS_OBFUSCATION_TOOLKIT包提供了一个折中而高效的方案。它的核心优势在于加解密在数据库内部完成密钥管理可以依托数据库自身的权限体系减少了应用端密钥泄露的风险。加解密运算由数据库引擎执行效率有保障。SQL直接可用加密和解密操作可以直接在SQL语句中调用使得我们可以在查询条件中动态解密数据后进行比对为实现模糊查询提供了可能。算法可靠这些内置函数通常基于AES、DES等标准加密算法安全性经过验证。因此选择内置函数方案是在不引入额外中间件、不改变应用大量架构的前提下最直接可行的路径。2.2 模糊查询的挑战与破局点加密是确定性或随机化的过程。对于模糊查询我们需要的不是精确匹配密文而是对明文进行模式匹配。直接WHERE STANDARD_DECRYPT(encrypted_column, ‘key’) LIKE ‘%139%’在理论上是可行的但它意味着数据库需要对表中该列每一行数据都进行解密操作后再逐行进行LIKE匹配。在数据量稍大的表中这种全表解密扫描的性能是灾难性的完全不具备可操作性。所以真正的破局点在于如何为加密字段建立有效的、支持模糊匹配的索引。遗憾的是在密文上直接创建B树索引对模糊查询毫无帮助。我们的思路必须转变能否提取或生成一个可用于模糊查询的“特征值”并将这个特征值单独存储和索引答案是肯定的这就是“分段加密”或“特征值映射”的思路。3. 详细实现步骤与核心代码3.1 环境准备与函数确认首先确保你的达梦数据库版本支持这些加密函数。以DM8为例通常都是支持的。我们可以先做一个简单的测试确认函数可用性和基本用法。-- 查看加密函数是否可用 SELECT STANDARD_ENCRYPT(‘明文测试’, ‘my_secret_key_123’) FROM DUAL; -- 查看解密函数 SELECT STANDARD_DECRYPT(‘上一步返回的密文’, ‘my_secret_key_123’) FROM DUAL;注意密钥’my_secret_key_123’的长度和复杂性需要符合算法要求。对于STANDARD_ENCRYPT密钥通常是固定长度的例如对于早期的DES算法可能需要8字节。在实际生产环境中强烈建议使用更安全的密钥管理方式例如从数据库外部传入或使用达梦数据库的DBMS_OBFUSCATION_TOOLKIT包中更现代的AES算法它支持更长的密钥。这里为演示方便使用简单字符串。3.2 表结构设计与数据加密存储假设我们要加密存储用户的phone_number手机号字段。为了实现高效的模糊查询例如查询尾号为‘6789’的用户我们采用“密文存储 特征列索引”的方案。1. 创建用户表CREATE TABLE dm_user ( id INT PRIMARY KEY, username VARCHAR(50), -- 原始手机号明文仅用于演示初始插入实际生产环境不应长期保留 phone_plain VARCHAR(11), -- 加密后的手机号密文使用VARBINARY类型存储 phone_encrypted VARBINARY(256), -- 用于模糊查询的特征列手机号后4位明文。可根据需求调整如后6位、前3位后4位等。 phone_suffix VARCHAR(4) );2. 创建插入数据的存储过程或应用层实现这个过程负责在插入或更新数据时自动完成加密和特征值提取。CREATE OR REPLACE PROCEDURE sp_insert_user( p_username VARCHAR, p_phone VARCHAR ) AS v_encrypted VARBINARY(256); v_suffix VARCHAR(4); v_key VARCHAR(32) : ‘this_is_a_32byte_key_for_aes_256!’; -- AES-256密钥需32字节 BEGIN -- 1. 使用内置函数加密手机号 -- 注意这里示例使用一个自定义的加密函数包装实际需根据达梦版本调整。 -- 达梦可能直接使用 STANDARD_ENCRYPT 或 DBMS_OBFUSCATION_TOOLKIT.DESENCRYPT -- 假设我们使用一个兼容AES的函数 MY_AES_ENCRYPT v_encrypted : MY_AES_ENCRYPT(p_phone, v_key); -- 2. 提取模糊查询特征值手机号后4位 v_suffix : SUBSTR(p_phone, -4); -- 3. 插入数据 INSERT INTO dm_user (id, username, phone_plain, phone_encrypted, phone_suffix) VALUES (SEQ_USER.NEXTVAL, p_username, p_phone, v_encrypted, v_suffix); COMMIT; DBMS_OUTPUT.PUT_LINE(‘用户插入成功。’); END; /实操心得密钥v_key硬编码在存储过程中是极不安全的。生产环境中应通过安全的方式传入例如从应用配置中心获取或在数据库中使用DBMS_CRYPTO如果支持从安全存储中读取。此外MY_AES_ENCRYPT是一个示意函数你需要根据达梦数据库的实际函数名和语法进行调整。例如可能是DBMS_OBFUSCATION_TOOLKIT.AESENCRYPT。3. 为特征列创建索引为了加速基于后缀的查询我们必须为phone_suffix列创建索引。CREATE INDEX idx_user_phone_suffix ON dm_user(phone_suffix);3.3 实现模糊查询的关键SQL现在我们来实现核心的模糊查询。假设业务场景是查找手机号末尾是‘6789’的所有用户。低效的全表解密扫描方式绝对禁止在生产环境使用SELECT id, username, STANDARD_DECRYPT(phone_encrypted, ‘key’) AS phone FROM dm_user WHERE STANDARD_DECRYPT(phone_encrypted, ‘key’) LIKE ‘%6789’;这种方式会解密表中所有行的phone_encrypted字段性能极差。高效的特征列过滤方式SELECT id, username, MY_AES_DECRYPT(phone_encrypted, ‘this_is_a_32byte_key_for_aes_256!’) AS phone FROM dm_user WHERE phone_suffix ‘6789’; -- 先利用索引快速定位到候选集这条语句的执行路径是利用idx_user_phone_suffix索引快速找到所有phone_suffix ‘6789’的行。这是一个非常快速的等值查询。只对这些筛选出来的少量行而不是全表执行解密操作MY_AES_DECRYPT获取完整的手机号明文。支持更复杂模糊查询的扩展方案如果需求是查询包含‘139’段落的手机号我们可以扩展特征列。例如再增加一个phone_prefix3列存储前三位查询时组合使用SELECT … FROM dm_user WHERE phone_prefix3 ‘139’ AND phone_suffix ‘6789’; -- 或者只查前三位 SELECT … FROM dm_user WHERE phone_prefix3 ‘139’;通过多个特征列的组合索引可以支持更多样化的模糊查询模式。3.4 封装为视图或函数提升易用性对于应用开发者来说他们可能希望像查询普通字段一样使用。我们可以创建一个视图隐藏解密和特征列的逻辑。CREATE VIEW v_user_safe AS SELECT id, username, MY_AES_DECRYPT(phone_encrypted, ‘this_is_a_32byte_key_for_aes_256!’) AS phone_number, phone_suffix -- 根据需要决定是否暴露 FROM dm_user; -- 应用层查询时可以这样写但依然要利用phone_suffix SELECT * FROM v_user_safe WHERE phone_suffix ‘6789’;或者创建一个解密函数方便在查询中直接调用但务必提醒开发者不能将其用于WHERE条件中的全表扫描。CREATE OR REPLACE FUNCTION fn_decrypt_phone(p_encrypted VARBINARY) RETURN VARCHAR AS BEGIN RETURN MY_AES_DECRYPT(p_encrypted, ‘密钥’); END; /4. 性能、安全与扩展性深度探讨4.1 性能影响分析与优化本方案的核心性能损耗点与优化策略如下环节性能影响优化策略数据写入轻微增加。每次插入/更新需执行一次加密运算和特征值提取。1. 使用数据库存储过程减少网络往返。2. 加密运算本身是CPU密集型确保数据库服务器CPU资源充足。精确查询几乎无影响。通过特征列如phone_suffix的等值查询可以利用B树索引效率极高。解密操作仅针对结果集开销很小。确保特征列上创建了合适的索引。复杂模糊查询取决于特征列的设计。例如查询LIKE ‘%139%’如果只设计了后缀特征列则无法优化会退化为全表扫描解密。设计阶段是关键。必须与业务方充分沟通明确所有模糊查询的模式前缀匹配、后缀匹配、中间匹配并据此设计对应的特征列。例如-LIKE ‘139%’(前缀)增加phone_prefix3列。-LIKE ‘%6789’(后缀)使用phone_suffix列。-LIKE ‘%4567%’(中间)较难优化可考虑将手机号按3-4-4分段存储多个特征列但复杂度剧增。存储空间增加。额外存储了密文比明文略大和特征列。权衡安全与成本。特征列通常很短空间开销可接受。我的实测经验在一个约100万行的测试表中对未加密字段做LIKE ‘%1234’查询需要数秒全表扫描。使用本方案在phone_suffix列有索引的情况下等值查询WHERE phone_suffix ‘1234’可以在毫秒级返回结果性能提升上千倍。代价是写入时多计算一个后缀以及约5%的额外存储空间这个交换比是非常值得的。4.2 安全性增强措施密钥管理是生命线绝对禁止将密钥硬编码在SQL脚本、存储过程或应用代码中。建议使用数据库外部密钥管理如HashiCorp Vault、云厂商的KMS服务。应用从KMS获取密钥每次查询时动态传入。利用数据库权限控制将执行加密解密函数的权限限制在特定的数据库角色或用户避免普通查询账号直接接触密钥。密钥轮转定期更换加密密钥。对于新数据使用新密钥加密。对于旧数据需要在业务低峰期执行数据重加密迁移任务。最小化特征列信息泄露特征列如手机号后4位毕竟是明文。虽然单独的后4位不足以定位一个人但仍存在信息泄露风险。可以考虑加盐哈希存储特征值对“手机号后4位用户ID盐值”进行哈希如MD5、SHA256将哈希值存入特征列。查询时应用层用同样的逻辑计算待查值的哈希然后在数据库中进行哈希值的等值匹配。这样特征列存储的也是不可逆的散列值安全性更高。但缺点是失去了直接的可读性且哈希冲突虽然概率极低需要处理。控制特征列访问权限通过视图只向特定服务或管理员暴露解密后的完整信息对大多数业务查询只提供特征列匹配接口。审计与监控开启数据库的审计功能记录所有对加密字段进行解密操作的SQL语句和执行者便于事后追溯。4.3 方案扩展与变体支持中文姓名的模糊查询原理相通。例如需要支持“姓名中包含‘明’字”的查询。可以将姓名按字拆分建立一张关联表user_name_index (user_id, single_char)存储用户姓名中的每一个字。查询时先通过SELECT user_id FROM user_name_index WHERE single_char ‘明’快速定位用户ID集合再关联主表查询详情。这是一种“倒排索引”的思想。使用数据库原生插件或自定义函数如果达梦数据库的内置函数不满足需求如算法、性能可以考虑用C/C或Java编写自定义函数(UDF)集成更先进的加密算法如国密SM4或更复杂的特征提取逻辑并将其注册到数据库中。这需要更高的数据库管理和开发能力。与应用层缓存结合对于热数据可以在应用层缓存解密后的明文信息需确保缓存安全如使用内存安全容器、设置短TTL从而减轻数据库的解密压力。但缓存更新策略需要与数据更新同步增加了系统复杂度。5. 常见问题与故障排查实录在实际开发和运维中我遇到了以下几个典型问题问题1加密后的数据插入数据库时报“无效的字符”或长度错误。原因STANDARD_ENCRYPT等函数返回的是二进制数据VARBINARY类型。如果试图将其插入到VARCHAR或CHAR字段中会因为字符集编码问题导致失败。解决务必使用VARBINARY或BLOB类型的列来存储密文。在达梦中VARBINARY是最常用的选择。问题2解密时返回乱码或报错。原因排查步骤密钥不一致这是最常见的原因。检查加密和解密使用的密钥是否完全一致包括大小写、空格和特殊字符。建议将密钥定义为一个常量在加密和解密处引用同一个常量。数据被篡改密文在存储或传输过程中发生了哪怕一个字节的变化解密都会失败。确保字段长度足够没有发生截断。算法或模式不匹配如果你使用的是更底层的DBMS_OBFUSCATION_TOOLKIT需要确保加密和解密时指定的算法AES/DES、模式CBC/ECB、填充方式PKCS5等参数完全一致。诊断技巧可以先尝试用同一个密钥和函数对一个固定的短字符串如‘test’进行加密并立即解密看是否能成功。这可以隔离出数据本身的问题。问题3模糊查询特征列的设计无法覆盖所有业务查询需求。现象业务提出了一个新的模糊查询条件现有的phone_suffix列无法支持导致查询性能低下。预防与解决需求冻结与评审在方案设计初期必须与产品、业务方深入沟通穷举并确认所有可能的模糊查询模式并将其作为设计输入。预留扩展字段在设计表时可以预留1-2个VARCHAR类型的通用特征列并做好注释。当新的查询模式出现时通过ETL任务或应用程序逻辑计算新的特征值填入该列并建立索引。考虑使用分词与搜索中间件对于极其复杂、多变的文本模糊查询需求如地址、长描述本方案会变得非常笨重。此时应考虑引入Elasticsearch、达梦数据库自身的全文检索功能等专用检索引擎。将密文存储在DM中将用于检索的特征文本同步到检索引擎中。问题4密钥轮转时如何平滑迁移已加密的历史数据方案这是一个在线业务需要谨慎处理的问题。基本步骤是生成新密钥Key_new。修改数据写入逻辑新插入和更新的数据使用Key_new加密。编写一个后台迁移任务分批读取历史数据用Key_old解密然后用Key_new重新加密后写回。这个过程要控制好批次大小和间隔避免对线上数据库造成过大压力。在迁移期间查询逻辑需要兼容先尝试用Key_new解密如果失败可能是旧数据则尝试用Key_old解密。这可以通过一个包装函数来实现。迁移完成后统一使用Key_new并从代码中移除Key_old。这个基于达梦数据库内置函数实现字段加密与模糊查询的方案本质上是一种“空间换时间”和“安全换便利”的权衡艺术。它没有银弹但其优点在于实施简单、对现有架构侵入小、性能优化效果立竿见影。最关键的是它迫使开发者和架构师在项目早期就必须严肃思考数据安全与业务功能的边界从而做出更稳健的设计决策。在实际项目中我建议先从一个最核心的敏感字段开始试点验证整个流程再逐步推广到其他字段这样能有效控制风险和复杂度。

相关新闻

从数据到上线:揭秘大模型端到端训练与推理的完整工程化实践

从数据到上线:揭秘大模型端到端训练与推理的完整工程化实践

目录 端到端流程概述 数据准备阶段 训练阶段 评估阶段 部署阶段 监控阶段 实践建议与最佳实践 摘要 模型训练与推理的端到端流程由数据准备、训练、评估、部署、监控五个阶段串联,其中数据准备与清洗通常占全流程约 40% 的工作量。一个 70 亿参数模型在 2000 亿 token 语料上预…

2026/8/13 23:04:37 阅读更多 →
【RT-DETR涨点改进】CVPR 2025 | YOLO联合Mamba火热发论文改进篇 | 引入EfficientViM 新型轻量级视觉Mamba,高效捕捉全局依赖,适合目标检测任务

【RT-DETR涨点改进】CVPR 2025 | YOLO联合Mamba火热发论文改进篇 | 引入EfficientViM 新型轻量级视觉Mamba,高效捕捉全局依赖,适合目标检测任务

一、本文介绍 本文给大家介绍EfficientViM新型轻量级视觉Mamba改进 RT-DETR 模型!“不需要安装mamba环境也可以运行!”。EfficientViM 模块通过减少计算复杂度、优化内存使用、提升目标检测精度和加速推理,显著改进了 RT-DETR 在目标检测中的表现。适应各种目标检测场景,特…

2026/8/13 23:04:37 阅读更多 →
办公自动化实战:Python与VBA驱动Word/WPS文档批量处理插件开发指南

办公自动化实战:Python与VBA驱动Word/WPS文档批量处理插件开发指南

1. 项目缘起:从重复劳动到一键解放 如果你经常和Word或WPS打交道,尤其是处理格式要求严格的公文、报告或长篇文档,那你一定对下面这些场景深恶痛绝:每次拿到一份文档,都要手动调整标题样式、统一字体字号、检查页边距、…

2026/8/13 23:03:37 阅读更多 →

最新新闻

深入解析Trae-Agent的Patch机制:实现配置动态更新与热修复

深入解析Trae-Agent的Patch机制:实现配置动态更新与热修复

1. 项目概述:理解Trae-Agent的Patch机制在分布式系统和微服务架构日益复杂的今天,配置的动态更新与热修复能力成为了保障服务稳定性的关键。Trae-Agent,作为一个设计用于管理和分发配置变更的代理组件,其核心价值之一就体现在“Pa…

2026/8/14 2:17:14 阅读更多 →
Claude Code懒加载Agent行动说明:提升AI编程助手性能与扩展性

Claude Code懒加载Agent行动说明:提升AI编程助手性能与扩展性

1. 从“一次性加载”到“按需调用”:为什么我们需要懒加载的 Agent 行动说明如果你用过一些早期的 AI 编程助手,或者尝试过在 IDE 里集成一个功能庞大的 AI 插件,大概率会遇到这种情况:启动 IDE 时,插件加载慢如蜗牛&a…

2026/8/14 2:17:14 阅读更多 →
AI编码助手Skill机制解析:从概念到实战打造智能开发伙伴

AI编码助手Skill机制解析:从概念到实战打造智能开发伙伴

1. 从一个真实的业务需求说起:为什么我们需要“智能编码伙伴”?最近在做一个后台管理系统的迭代,需求很典型:用户希望在商品列表页增加一个“批量修改价格”的功能。听起来简单,不就是个表单提交吗?但细看需…

2026/8/14 2:17:14 阅读更多 →
多功能厅扩声系统中插卡式音频处理器的选择建议

多功能厅扩声系统中插卡式音频处理器的选择建议

多功能厅扩声系统中插卡式音频处理器的选择建议在现代多功能厅的音视频系统建设中,插卡式音频处理器正逐渐成为连接数字会议系统与专业音响扩声系统的核心枢纽。与传统的固定I/O接口处理器相比,插卡式架构赋予了用户根据实际应用场景灵活配置输入输出通道…

2026/8/14 2:17:14 阅读更多 →
基于BERT的法律文本评述提取:从N个罪人思想到NLP实战

基于BERT的法律文本评述提取:从N个罪人思想到NLP实战

最近在开发一个法律文书分析系统时,遇到了一个棘手的文本处理需求:需要从海量的法庭判决书中,自动识别并提取出法官的“评述”(Commentary)部分,例如对证据的采信理由、对量刑的考量分析等。这类文本不同于…

2026/8/14 2:17:14 阅读更多 →
边云协同视频分析性能优化指南:多站点部署下的参数配置与排查清单(边缘推理+云端管理)

边云协同视频分析性能优化指南:多站点部署下的参数配置与排查清单(边缘推理+云端管理)

1. 环境假设在参考本文的参数与优化步骤前,请确认您的系统环境符合以下基础假设:部署拓扑: 1 个中心云端管理平台(部署于公网或私有云 VM) N 个边缘站点节点(部署于各站点局域网的边缘 AI 盒子/工控机&…

2026/8/14 2:16:14 阅读更多 →

日新闻

临沂网站建设铭镇:深耕本土数字生态,以匠心铸就企业品牌核心竞争力

临沂网站建设铭镇:深耕本土数字生态,以匠心铸就企业品牌核心竞争力

在这个流量为王、视觉至上的互联网时代,对于临沂乃至整个山东乃至全国的传统中小企业来说,拥有一张精美的“数字名片”早已不再是可选项,而是生存的必答题。每当夜幕降临,沂河两岸灯火辉煌,物流之都的喧嚣逐渐沉淀为对未来的思考。我们常常听到老板们在茶余饭后探讨:为什…

2026/8/14 0:00:26 阅读更多 →
Flutter与OpenHarmony实现剧本杀组队表单开发实战

Flutter与OpenHarmony实现剧本杀组队表单开发实战

1. 项目概述在移动应用开发领域,跨平台框架Flutter因其高效的开发体验和出色的性能表现,已经成为众多开发者的首选。而OpenHarmony作为新兴的操作系统平台,其开放性和灵活性为开发者提供了全新的可能性。本文将聚焦于一个实际应用场景——剧本…

2026/8/14 0:00:26 阅读更多 →
大连网站建设找简维科技:为您打造懂业务更懂用户的数字化转型引擎

大连网站建设找简维科技:为您打造懂业务更懂用户的数字化转型引擎

在这个数字化浪潮席卷全球的今天,企业想要在激烈的市场竞争中站稳脚跟,拥有一张好看的“数字名片”已经远远不够了。很多老板在刚开始接触互联网业务时,都有一个共同的困惑:为什么我花了钱建的网站,就像是在真空中自嗨?访客进来转了两圈就跑了,线索石沉大海,甚至连客服…

2026/8/14 0:01:27 阅读更多 →

周新闻

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁 【免费下载链接】baidupankey 在线查询网盘提取码(维护中 rm repo) 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 你是否曾经在深夜寻找一份重要资料&#x…

2026/8/13 2:38:34 阅读更多 →
如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/13 10:41:52 阅读更多 →
收藏!小白程序员轻松入门大模型,从Harness工程开始实践

收藏!小白程序员轻松入门大模型,从Harness工程开始实践

文章强调学习大模型不应只关注模型本身,而应重视模型外的系统搭建,即Harness。提出AgentModelHarness的实用公式,详细介绍Harness的四个层次:持久化层、执行层、控制层和观察与验证层。文章还探讨了上下文工程、工具设计、AGENTS.…

2026/8/13 10:41:51 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/13 10:41:50 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/13 10:41:49 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/13 10:41:49 阅读更多 →