MySQL UDF 一例
目录1. 功能2. des_encrypt.cc 代码3. 使用动态库编译4. 复制到 MySQL 插件目录5. 重启 MySQL6. 创建函数并调用执行1. 功能在 MySQL 中实现 DES/ECB/PKCS5Padding 加密算法。2. des_encrypt.cc 代码#include stdio.h #include stdlib.h #include string.h #include mysql.h #include openssl/des.h #include openssl/md5.h #ifndef my_bool #define my_bool unsigned char #endif extern C { my_bool direct_checksum_init(UDF_INIT *initid, UDF_ARGS *args, char *message); void direct_checksum_deinit(UDF_INIT *initid); char *direct_checksum(UDF_INIT *initid, UDF_ARGS *args, char *result, unsigned long *length, char *is_null, char *error); } my_bool direct_checksum_init(UDF_INIT *initid, UDF_ARGS *args, char *message) { if (args-arg_count ! 4) { strcpy(message, 需要4个参数: userID, diamondCount, updateTime, key); return 1; } initid-max_length 32; return 0; } void direct_checksum_deinit(UDF_INIT *initid) {} char *direct_checksum(UDF_INIT *initid, UDF_ARGS *args, char *result, unsigned long *length, char *is_null, char *error) { if (!args-args[0] || !args-args[1] || !args-args[2] || !args-args[3]) { *is_null 1; return NULL; } // 获取参数 long long userID *((long long*)args-args[0]); long long diamondCount *((long long*)args-args[1]); long long updateTime *((long long*)args-args[2]); char *key args-args[3]; // 1. 构建字符串 char plaintext[256]; snprintf(plaintext, sizeof(plaintext), %lld,%lld,%lld, userID, diamondCount, updateTime); // 2. DES加密 DES_key_schedule schedule; DES_cblock key_block; memset(key_block, 0, sizeof(key_block)); strncpy((char*)key_block, key, 8); DES_set_key_unchecked(key_block, schedule); int text_len (int)strlen(plaintext); int pad_len 8 - (text_len % 8); if (pad_len 0) pad_len 8; int total_len text_len pad_len; // 分配内存 unsigned char *padded_input (unsigned char*)malloc(total_len); unsigned char *des_output (unsigned char*)malloc(total_len); memcpy(padded_input, plaintext, text_len); for (int i 0; i pad_len; i) { padded_input[text_len i] (unsigned char)pad_len; } // ECB模式加密 for (int i 0; i total_len; i 8) { DES_ecb_encrypt((DES_cblock*)(padded_input i), (DES_cblock*)(des_output i), schedule, DES_ENCRYPT); } // 3. 转16进制字符串 char hex_str[1024]; for (int i 0; i total_len; i) { sprintf(hex_str i * 2, %02x, des_output[i]); } hex_str[total_len * 2] \0; // 4. MD5加密 MD5_CTX md5_ctx; unsigned char md5_digest[16]; MD5_Init(md5_ctx); MD5_Update(md5_ctx, hex_str, (unsigned long)strlen(hex_str)); MD5_Final(md5_digest, md5_ctx); // 5. 关键直接写入result缓冲区作为字符串 for (int i 0; i 16; i) { sprintf(result i * 2, %02x, md5_digest[i]); } result[32] \0; // null终止 // 6. 告诉MySQL这是32个字符的字符串 *length 32; // 清理内存 free(padded_input); free(des_output); return result; }3. 使用动态库编译g -fPIC -shared -o des_encrypt.so des_encrypt.cc \ -I/home/mysql/mysql-8.0.22/include \ -I/usr/include/openssl \ -L/home/mysql/mysql-8.0.22/lib \ -Wl,-rpath,/home/mysql/mysql-8.0.22/lib \ -lmysqlclient -lssl -lcrypto4. 复制到 MySQL 插件目录cp des_encrypt.so /home/mysql/mysql-8.0.22/lib/plugin/ chmod 755 /home/mysql/mysql-8.0.22/lib/plugin/des_encrypt.so5. 重启 MySQLmysqladmin -uroot -p123456 -S /data/3306/mysqldata/mysql.sock shutdown mysqld_safe --defaults-file/home/mysql/my.cnf 6. 创建函数并调用执行use test; create function direct_checksum returns string soname des_encrypt.so; select UserID,DiamCount,UpdateTimeJava, cast(direct_checksum(UserID,DiamondCount,UpdateTimeJava, gnbihUyr) as char) CheckSum from t1 limit 20;

相关新闻

VRRP:智算中心网络高可用的关键技术

VRRP:智算中心网络高可用的关键技术

VRRP协议概述VRRP (Virtual Router Redundancy Protocol) 是一种旨在解决局域网内默认网关单点故障问题的容错协议。通过 VRRP,多台物理路由器或交换机可以逻辑上聚合为一个“虚拟路由器”,并对外统一提供一个虚拟 IP (VIP)。对于终端设备(如…

2026/7/8 9:04:57 阅读更多 →
装机佬私藏!这个14年免费的U盘神器,验机再也不求人

装机佬私藏!这个14年免费的U盘神器,验机再也不求人

上周帮表弟验新笔记本,奸商把i5说成i7,差点当冤大头。还好我U盘里常驻这个14年免费的神器——插上就能跑CPU烤机、查硬盘通电时间,当场揭穿套路!现在连我妈换手机都喊我带着它。 本文工具:图吧工具箱;适用…

2026/7/8 12:48:02 阅读更多 →
基于SpringBoot的社区医疗服务管理小程序的设计与开发(源码+lw+部署文档+讲解等)

基于SpringBoot的社区医疗服务管理小程序的设计与开发(源码+lw+部署文档+讲解等)

课题介绍 本课题旨在设计并开发一套基于SpringBoot框架与微信小程序的社区医疗服务管理系统,破解社区居民就医挂号繁琐、健康咨询不便、医疗资源对接不及时、健康档案分散等痛点,搭建高效便捷的移动端社区医疗服务平台。系统采用前后端分离架构&#xff…

2026/7/7 8:15:05 阅读更多 →

最新新闻

League-Toolkit:英雄联盟玩家的智能指挥中心配置全攻略

League-Toolkit:英雄联盟玩家的智能指挥中心配置全攻略

League-Toolkit:英雄联盟玩家的智能指挥中心配置全攻略 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power 🚀. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit 你是否曾在英雄联盟对局中因…

2026/7/9 8:46:23 阅读更多 →
中教睿海靠谱吗?CCTV认证与退役军人网官方合作实力验证

中教睿海靠谱吗?CCTV认证与退役军人网官方合作实力验证

"中教睿海靠谱吗?"这是每一位准备报名军队文职培训的考生都会问的问题。在军队文职培训行业乱象频发的背景下,这个问题显得尤为重要。2025年,教育部等多部委联合开展军队文职人员考试培训专项整治,明确指出部分机构存在…

2026/7/9 8:44:22 阅读更多 →
5秒极速破解百度网盘提取码:开源神器baidupankey完全指南

5秒极速破解百度网盘提取码:开源神器baidupankey完全指南

5秒极速破解百度网盘提取码:开源神器baidupankey完全指南 【免费下载链接】baidupankey 在线查询网盘提取码(维护中 rm repo) 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 还在为百度网盘加密资源而烦恼吗?每…

2026/7/9 8:44:22 阅读更多 →
PIC18F55K42上拉下拉电阻配置与信号完整性优化

PIC18F55K42上拉下拉电阻配置与信号完整性优化

1. 信号上拉与下拉的基础原理在数字电路设计中,上拉(Pull-up)和下拉(Pull-down)是两种常见的电阻配置方式,用于确保信号线在无主动驱动时保持确定的逻辑电平状态。当信号线处于高阻抗(High-Z&am…

2026/7/9 8:42:22 阅读更多 →
【RT-DETR涨点改进】13 QKV维度自适应缩放:打破1:1:1的魔咒,让RT-DETR的mAP再涨1.2%

【RT-DETR涨点改进】13 QKV维度自适应缩放:打破1:1:1的魔咒,让RT-DETR的mAP再涨1.2%

13 QKV维度自适应缩放:打破1:1:1的魔咒,让RT-DETR的mAP再涨1.2% 开篇故事 上个月,我帮一家自动驾驶公司调优他们的目标检测模型。他们用的是RT-DETR-base,在Waymo数据集上跑了两个月,mAP卡在78.3%死活上不去。团队Leader是个急性子,直接拍板:“加头数!加到16头!”结…

2026/7/9 8:40:21 阅读更多 →
完整学习LLM(一):为什么我要系统学习大模型

完整学习LLM(一):为什么我要系统学习大模型

背景:我不想只停留在会用一开始用大模型的时候,其实很容易满足.打开 ChatGPT,问一个问题,它给你一段回答.接 API,传一个 prompt,拿到一个 response.看起来好像已经会用了.但只要开始做项目,问题马上就出来了.比如做一个项目知识库:用户问问题-> 大模型回答刚开始看起来很顺.…

2026/7/9 8:38:20 阅读更多 →

日新闻

3大音乐平台逐字歌词完整解决方案:ESLyric-LyricsSource完全指南

3大音乐平台逐字歌词完整解决方案:ESLyric-LyricsSource完全指南

3大音乐平台逐字歌词完整解决方案:ESLyric-LyricsSource完全指南 【免费下载链接】ESLyric-LyricsSource Advanced lyrics source for ESLyric in foobar2000 项目地址: https://gitcode.com/gh_mirrors/es/ESLyric-LyricsSource 还在为Foobar2000找不到高质…

2026/7/9 0:01:04 阅读更多 →
ElegantBook封面定制揭秘:3个步骤打造专业级学术书籍

ElegantBook封面定制揭秘:3个步骤打造专业级学术书籍

ElegantBook封面定制揭秘:3个步骤打造专业级学术书籍 【免费下载链接】ElegantBook Elegant LaTeX Template for Books 项目地址: https://gitcode.com/gh_mirrors/el/ElegantBook 你是否曾经为学术书籍的封面设计而烦恼?想要一个既专业又美观的封…

2026/7/9 0:03:06 阅读更多 →
如何高效使用pyodbc:企业级数据库连接终极指南

如何高效使用pyodbc:企业级数据库连接终极指南

如何高效使用pyodbc:企业级数据库连接终极指南 【免费下载链接】pyodbc Python ODBC bridge 项目地址: https://gitcode.com/gh_mirrors/py/pyodbc 在当今数据驱动的商业环境中,企业级数据库连接已成为现代应用开发的核心需求。pyodbc作为一款强大…

2026/7/9 0:07:11 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/8 16:14:06 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/7 12:34:47 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/8 16:59:55 阅读更多 →

月新闻