加解密函数
- sm4()函数/rc4()函数,参数分别为: 加/解密数据; 密钥; 加密(0)/解密(1)标识。
select sm4('123456abcdef', '0123456789ABCDEF', 0);
select rc4('123456abcdef', '0123456789ABCDEF', 0);
select sm4(sm4('123456abcdef', '0123456789ABCDEF', 0), '0123456789ABCDEF', 1);
select rc4(rc4('123456abcdef', '0123456789ABCDEF', 0), '0123456789ABCDEF', 1);
- sm4_ex()函数(rc4没有ex函数扩展) 参数分别为: 加/解密数据; 密钥; 加密/解密标识; 填充模式。
- (1) 填充模式选1, 数据按16字节倍数强制填充,缺m个字节则填充m个字节的m值(m最大值为16)。
select sm4_ex('123456abcdef', '0123456789ABCDEF', 0, 1);
select sm4_ex(sm4_ex('123456abcdef', '0123456789ABCDEF', 0, 1), '0123456789ABCDEF', 1, 1);
- (2) 填充模式选0,数据按16字节倍数非强制填充0x0, 同sm4。
select sm4_ex('123456abcdef', '0123456789ABCDEF', 0, 0);
select sm4_ex(sm4_ex('123456abcdef', '0123456789ABCDEF', 0, 0), '0123456789ABCDEF', 1, 0);
- 带初始化向量的加密:
none 是 ZeroPadding SELECT encode(encrypt_iv('123456', 'MySecretKey12345','MySecretKey12345', 'aes-cbc/pad:none'), 'hex');
- 无初始化向量的加密,默认为
DECODING('00000000000000000000000000000000', 'hex'):SELECT encode(encrypt('123456', 'MySecretKey12345', 'aes-ecb'), 'hex');
编码和解码
- SM4 加解密结果是二进制数据,转换成字符:
ENCODE(sm4('加密内容','123456',0),'hex');
- 十六进制字符串转成二进制
DECODING('12e145b103c67e','hex')
- 二进制转字符串
convert_from(sm4(sm4('加密内容','123456',0),'123456','1'),'UTF8');