使用国密算法加解密Hive表数据
操作场景
MRS 3.6.0-LTS及之后版本,Hive支持一组国密加解密算法,使得表的字符串类型的字段数据可以使用国密算法进行加解密操作。
- 加密:sm4_encrypt('待加密的字符串数据或字段名称', '16位任意字符串代表的密钥', 加密模式(可选))
- 解密:sm4_decrypt('待解密的字符串数据或字段名称', '加密时指定的密钥', 加密模式(可选))
约束与限制
- 执行加解密操作时,加密模式可选,不填写时默认使用SM4/CTR/NOPADDING。
- 由于ECB加密算法不安全,所以加密模式不可以选择SM4/ECB。
- Varchar和Char类型字段加密后的数据可能会比原数据的字符串长,建议使用String类型。如果确实需要使用Varchar或Char类型字段建议调整字段长度为明文值的3倍以上且不低于50个字符。例如,可参考如下SQL调整字段长度,将testtable表的字段a的长度由10修改为20:
alter table testtable change column a a char(20);
加解密数据
- 以Hive客户端安装用户登录安装客户端的节点。
- 执行以下命令,切换到客户端安装目录,例如安装目录为“/opt/client”,请用户根据实际情况修改。
cd /opt/client - 执行以下命令配置环境变量。
source bigdata_env
- 集群认证模式是否为安全模式。
- 执行以下命令登录Hive客户端。
beeline
- 对表的字符串数据进行加密,例如:
select sm4_encrypt('testdata', 'ABCDEFGH12345678');其中,“testdata”为要进行加密的字符串数据,“ABCDEFGH12345678”为加密密钥,可以指定为任意16位字符串。命令执行后会返回加密字符串数据的结果,可用于解密。图1 加密字符串数据
- 对加密后的字符串数据结果进行解密,例如:
SELECT sm4_decrypt('01334750B78AB889A61C5E9F7DEE3EF819AA413EC94A17BC', 'ABCDEFGH12345678'); - 对字符串类型的字段进行加密,且指定加密模式。
例如,对表“teststr”的以下字段进行加密:
图3 加密数据
- 加密表字段并覆写数据,例如:
insert overwrite table teststr select sm4_encrypt(name, '0123456789123456', 'SM4/CBC/PKCS5Padding') from teststr;
其中,“name”为需要加密的表字段名称,“0123456789123456”为加密密钥,可以指定为任意16位字符串,“SM4/CBC/PKCS5Padding”为加密算法模式。
图4 加密及覆写数据
- 查看加密后的Hive表:
select * from teststr;图5 查看加密的Hive表
- 加密表字段并覆写数据,例如:
- 对加密后的字符串类型的字段的结果进行解密,例如:
select sm4_decrypt(name, '0123456789123456', 'SM4/CBC/PKCS5Padding') from teststr;
其中,“name”为需要解密的表字段名称,“0123456789123456”为加密时设置的密钥,第“SM4/CBC/PKCS5Padding”为加密算法模式。命令执行后会返回解密后的字段名称。图6 解密字符串类型的字段
