SM3加密udf

SM3加密udf

maven

```xml

<dependencies>

<!-- 配置日志 -->

<dependency>

<groupId>org.slf4j</groupId>

<artifactId>slf4j-api</artifactId>

<version>1.7.5</version>

</dependency>

<dependency>

<groupId>org.slf4j</groupId>

<artifactId>slf4j-log4j12</artifactId>

<version>1.7.12</version>

</dependency>

<dependency>

<groupId>log4j</groupId>

<artifactId>log4j</artifactId>

<version>1.2.17</version>

</dependency>

<!--添加Hadoop的依赖-->

<dependency>

<groupId>org.apache.hadoop</groupId>

<artifactId>hadoop-client</artifactId>

<version>3.1.1</version>

</dependency>

<dependency>

<groupId>junit</groupId>

<artifactId>junit</artifactId>

<version>4.11</version>

<scope>test</scope>

</dependency>

<!--添加hive依赖-->

<dependency>

<groupId>org.apache.hive</groupId>

<artifactId>hive-exec</artifactId>

<version>3.1.0</version>

</dependency>

<!--sm3,sm4加密算法-->

<dependency>

<groupId>org.bouncycastle</groupId>

<artifactId>bcprov-jdk15on</artifactId>

<version>1.66</version>

</dependency>

</dependencies>

```

java 代码

```java

import org.apache.hadoop.hive.ql.exec.UDF;

import org.bouncycastle.crypto.digests.SM3Digest;

import org.bouncycastle.pqc.math.linearalgebra.ByteUtils;

import java.io.UnsupportedEncodingException;

public class SM3Encrypt extends UDF {

public String evaluate(String paramStr) throws Exception {

String resultHexString = "";

try {

// 将字符串转换成byte数组

byte\[\] srcData = paramStr.getBytes("UTF-8");

// 调用SM3加密

byte\[\] hash = sm3Encrypt(srcData);

// 将返回的加密字节数组转换成16进制字符串

resultHexString = ByteUtils.toHexString(hash);

} catch (UnsupportedEncodingException e) {

e.printStackTrace();

}

return resultHexString;

}

public static byte\[\] sm3Encrypt(byte\[\] srcData) {

SM3Digest digest = new SM3Digest();

digest.update(srcData, 0, srcData.length);

byte\[\] hash = new bytedigest.getDigestSize();

digest.doFinal(hash, 0);

return hash;

}

}

```

注册udf

```shell

#1.上传jar包hiveSM3UDF-1.0-SNAPSHOT.jar到hdfs中/{上传目录}/

#2.hive中创建函数,(多个hiveserver2都需要重启)com.xxx.udf是包名

create function hiveSM3Encrypt as 'com.xxx.udf.SM3Encrypt' using jar 'hdfs:/{上传目录}/hiveSM3UDF-1.0-SNAPSHOT.jar';

#3.使用

select hiveSM3Encrypt(手机号) from table_name

```

相关推荐
yeccheng1 小时前
MySQL 索引超详解:从底层 B+ 树到面试高频考点
java·开发语言·jvm·mysql·面试
这个昵称不容易1 小时前
SpringBoot 读书笔记共享平台部署实战:97 个 Java 文件 / 113 个接口 / 10 张表
java·springboot·毕设
演艺大赏2 小时前
NiFi 的权限模型不是 RBAC:users.xml、authorizers.xml 与组件级策略
大数据
金銀銅鐵4 小时前
一个 Java 文件实现《孫子兵法·始計篇》中英对照阅读器
java·后端·ai编程
DevOpenClub4 小时前
高考教育信息问答 API:会话参数、资料引用与流式响应
java·数据库·高考
yuanyuan3344 小时前
2026枣庄带检测报告伸缩门品牌测评|本地服务
大数据·数据库·人工智能·伸缩门
bro_Java6664 小时前
《排序的底层逻辑:比较、交换与分治》
java·算法·排序算法
skywalk81635 小时前
hive 常驻集群:像 OSPF 一样在线,像 git 一样可信
运维·人工智能·hive
文丑颜不良啊5 小时前
LeetCode2081~2100题目解析
java·leetcode
玖米GEO运营王总监6 小时前
2026年账号矩阵协同效应怎么量化:三个指标与公式结构
java·大数据·数据库