羲和(halo)数据库基于此实现数据加密解密功能,为数据提供一定安全保障,使用encrypt()函数加密数据,主要包含三个参数分别为待加密数据、密钥和使用SM4算法加密;使用decrypt()解密函数进行解密,主要包含三个参数分别为加密后的数据、密钥和使用SM4算法解密。支持使用多种字符类型生成密钥,以及对多种字符类型数据进行加密,如下进行简要概述。
1.支持使用多种字符类型生成的密钥对数据进行加密,密钥长度不超过16位字符。相对于同一数据,不同密钥,生成不同的加密数据。convert_from()函数将解密后的数据转换成ASCII字符串。
select encrypt('xiaoming','hzyijinghalo','sm4');select convert_from(decrypt('\x094831464f62a4a0cf72071dcd0598a5','hzyijinghalo','sm4'),'SQL_ASCII');
select encrypt('xiaoming','59076289561','sm4');
select convert_from(decrypt('\xfcc3aea4e19c823e7173831a17acefa2','59076289561','sm4'),'SQL_ASCII');
select encrypt('xiaoming','%$#@)(*&^%!','sm4');
select convert_from(decrypt('\x838becde3f6e60afc47fa75ec942fd83','%$#@)(*&^%!','sm4'),'SQL_ASCII');
select encrypt('xiaoming','haloSM4杭12%$','sm4');
select convert_from(decrypt('\x88d90971915cc10a5cc4078e7f1d27be','haloSM4杭12%$','sm4'),'SQL_ASCII');
2.支持对多种字符类型数据进行加密,相对于同一密钥,不同数据生成不同的加密数据。
select encrypt('12345','haloSM4杭12%$','sm4');
select convert_from(decrypt('\x6c635bd0d7a0a02de3a9991f7d30590c','haloSM4杭12%$','sm4'),'SQ_ASCII');
select encrypt('12345','haloSM4杭12%$','sm4');
select convert_from(decrypt('\x6c635bd0d7a0a02de3a9991f7d30590c','haloSM4杭12%$','sm4'),'SQL_ASCII');
select encrypt('羲和SM4','haloSM4杭12%$','sm4');
select convert_from(decrypt('\x81660031932353b0f91ee0b2b0deff73','haloSM4杭12%$','sm4'),'SQL_ASCII');
3.解密支持pad:pkcs和pad:none参数,若decrypt返回结果位数过短,可使用pad:none对其补零,默认使用pad:pkcs
select encrypt('12345','12%$ha','sm4');
select decrypt('\x70ee654189f584e623d48b52cad27e13','12%$ha','sm4/pad:pkcs');
select decrypt('\x70ee654189f584e623d48b52cad27e13','12%$ha','sm4/pad:none');
4.同一数据,不可使用不同密钥进行解密,如下例子,出现ERROR信息,不可解密。
select encrypt('12345','haloSM4杭12%$','sm4');
select convert_from(decrypt('\x6c635bd0d7a0a02de3a9991f7d30590c','12345678','sm4'),'SQL_ASCII');




