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 byte[digest.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

```

相关推荐
sg_knight2 小时前
Spring 框架中的 SseEmitter 使用详解
java·spring boot·后端·spring·spring cloud·sse·sseemitter
郑州光合科技余经理4 小时前
同城系统海外版:一站式多语种O2O系统源码
java·开发语言·git·mysql·uni-app·go·phpstorm
一只乔哇噻4 小时前
java后端工程师+AI大模型开发进修ing(研一版‖day60)
java·开发语言·人工智能·学习·语言模型
千里码aicood4 小时前
计算机大数据、人工智能与智能系统开发定制开发
大数据·人工智能·深度学习·决策树·机器学习·森林树
Dolphin_Home4 小时前
笔记:SpringBoot静态类调用Bean的2种方案(小白友好版)
java·spring boot·笔记
MetaverseMan5 小时前
Java虚拟线程实战
java
浪潮IT馆5 小时前
Tomcat运行war包的问题分析与解决步骤
java·tomcat
悟能不能悟5 小时前
Caused by: java.sql.SQLException: ORA-28000: the account is locked怎么处理
java·开发语言
_院长大人_6 小时前
MyBatis Plus 分批查询优化实战:优雅地解决 IN 参数过多问题(实操)
java·mybatis
非著名架构师6 小时前
城市通风廊道的科学依据:气候大数据如何指导未来城市规划设计
大数据·风光功率预测·高精度气象数据