# mysql_udf_sm4 **Repository Path**: dworry/mysql_udf_sm4 ## Basic Information - **Project Name**: mysql_udf_sm4 - **Description**: mysql sm4-ecb 加解密插件 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2025-07-02 - **Last Updated**: 2025-08-29 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # SM4-ECB加解密UDF 本项目为 MySQL/MariaDB 提供基于 SM4 算法的用户定义函数(UDF),支持 ECB 模式加密和解密功能,适用于国密场景。 ## 构建 使用 Cargo 构建项目并生成动态库: ```bash cargo build --release ``` 如果需要安装到aarch64环境下 ```bash cargo install cross cross build --target aarch64-unknown-linux-gnu --release ``` 或者使用zigbuild编译aarch64版本 ```bash # 安装zig curl -L https://ziglang.org/download/index.json | jq -r '.master."x86_64-linux".tarball' | xargs curl -L -o zig.tar.xz tar -xJf zig.tar.xz sudo mv zig-linux-x86_64-* /usr/local/zig export PATH=/usr/local/zig:$PATH cargo install cargo-zigbuild # 验证安装: zig version cargo zigbuild --version # 编译aarch64版本 rustup target add aarch64-unknown-linux-gnu cross zigbuild --target aarch64-unknown-linux-gnu --release ``` ## 安装 - 复制编译好的target/release/libmysql_udf_sm4.so到mysql插件目录下(如/usr/lib/mysql/plugin)。 - mysql -uroot -p ```sql -- 安装 CREATE FUNCTION sm4_decrypt RETURNS string SONAME 'libmysql_udf_sm4.so'; CREATE FUNCTION sm4_encrypt RETURNS string SONAME 'libmysql_udf_sm4.so'; -- 取消安装 drop function sm4_decrypt; drop function sm4_encrypt; ``` ## 使用方式 ```sql -- 不推荐直接用使用密钥调用。请用keyring保管密钥。 -- 加密 SELECT sm4_encrypt('1234567890123456', 'hello world'); -- 解密 SELECT sm4_decrypt('1234567890123456', '23b45c4f60c24e55307f13851cef4d22'); ``` ## 用keyring插件保管密钥 ```sql -- keyring不支持SM4,用AES替换。 SELECT keyring_key_store( 'my_sm4_key', 'AES', '1234567890123456' ); -- 加密 SELECT sm4_encrypt(keyring_key_fetch('my_sm4_key'), 'hello world'); -- 解密 SELECT sm4_decrypt(keyring_key_fetch('my_sm4_key'), '23b45c4f60c24e55307f13851cef4d22'); ``` ## 注意事项 - 密钥必须为 16 字节字符串。 - 加密输出为十六进制字符串,解密输入也必须是十六进制格式。 - 本项目目前仅支持 ECB 模式,如需更安全的模式(如 CBC)请自行扩展。 ## 协议 本项目遵循 MIT License,请参阅 `LICENSE` 文件获取详细条款。