1.写java代码,打jar包

1.pom.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.zmlearn.udf</groupId><artifactId>udf</artifactId><version>1.0-SNAPSHOT</version><dependencies><dependency><!-- hive的udf依赖的包 --><groupId>org.apache.hive</groupId><artifactId>hive-exec</artifactId><version>2.1.0</version></dependency></dependencies><!-- 打包类的依赖的jar的插件 --><build><plugins><plugin><artifactId>maven-compiler-plugin</artifactId><version>2.3.2</version><configuration><source>1.8</source><target>1.8</target></configuration></plugin><plugin><artifactId>maven-assembly-plugin</artifactId><configuration><descriptorRefs><descriptorRef>jar-with-dependencies</descriptorRef></descriptorRefs></configuration><executions><execution><id>make-assembly</id><phase>package</phase><goals><goal>single</goal></goals></execution></executions></plugin></plugins></build></project>

2. AES对称加密和解密类

package com.zmlearn.udf;import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;import javax.crypto.*;
import javax.crypto.spec.SecretKeySpec;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.util.Scanner;/** AES对称加密和解密*/
public class AES {public static final String ENCODE_RULES = "8DFC34B0B7C98EFA0A299A6C3FFFBD9D";/** 加密* 1.构造密钥生成器* 2.根据ecnodeRules规则初始化密钥生成器* 3.产生密钥* 4.创建和初始化密码器* 5.内容加密* 6.返回字符串*/public static String AESEncode(String encodeRules,String content){try {//1.构造密钥生成器,指定为AES算法,不区分大小写KeyGenerator keygen=KeyGenerator.getInstance("AES");//2.根据ecnodeRules规则初始化密钥生成器//生成一个128位的随机源,根据传入的字节数组SecureRandom random = SecureRandom.getInstance("SHA1PRNG");random.setSeed(encodeRules.getBytes());keygen.init(128, random);            //3.产生原始对称密钥SecretKey original_key=keygen.generateKey();//4.获得原始对称密钥的字节数组byte [] raw=original_key.getEncoded();//5.根据字节数组生成AES密钥SecretKey key=new SecretKeySpec(raw, "AES");//6.根据指定算法AES自成密码器Cipher cipher=Cipher.getInstance("AES");//7.初始化密码器,第一个参数为加密(Encrypt_mode)或者解密解密(Decrypt_mode)操作,第二个参数为使用的KEYcipher.init(Cipher.ENCRYPT_MODE, key);//8.获取加密内容的字节数组(这里要设置为utf-8)不然内容中如果有中文和英文混合中文就会解密为乱码byte [] byte_encode=content.getBytes(StandardCharsets.UTF_8);//9.根据密码器的初始化方式--加密:将数据加密byte [] byte_AES=cipher.doFinal(byte_encode);//10.将加密后的数据转换为字符串//这里用Base64Encoder中会找不到包//解决办法://在项目的Build path中先移除JRE System Library,再添加库JRE System Library,重新编译后就一切正常了。//11.将字符串返回return new BASE64Encoder().encode(byte_AES);} catch (NoSuchAlgorithmException | NoSuchPaddingException | InvalidKeyException | IllegalBlockSizeException | BadPaddingException e) {e.printStackTrace();}//如果有错就返加nulllreturn null;}/** 解密* 解密过程:* 1.同加密1-4步* 2.将加密后的字符串反纺成byte[]数组* 3.将加密内容解密*/public static String AESDncode(String encodeRules,String content){try {//1.构造密钥生成器,指定为AES算法,不区分大小写KeyGenerator keygen=KeyGenerator.getInstance("AES");//2.根据ecnodeRules规则初始化密钥生成器//生成一个128位的随机源,根据传入的字节数组SecureRandom random = SecureRandom.getInstance("SHA1PRNG");random.setSeed(encodeRules.getBytes());keygen.init(128, random);//3.产生原始对称密钥SecretKey original_key=keygen.generateKey();//4.获得原始对称密钥的字节数组byte [] raw=original_key.getEncoded();//5.根据字节数组生成AES密钥SecretKey key=new SecretKeySpec(raw, "AES");//6.根据指定算法AES自成密码器Cipher cipher=Cipher.getInstance("AES");//7.初始化密码器,第一个参数为加密(Encrypt_mode)或者解密(Decrypt_mode)操作,第二个参数为使用的KEYcipher.init(Cipher.DECRYPT_MODE, key);//8.将加密并编码后的内容解码成字节数组byte [] byte_content= new BASE64Decoder().decodeBuffer(content);/** 解密*/byte [] byte_decode=cipher.doFinal(byte_content);return new String(byte_decode, StandardCharsets.UTF_8);} catch (NoSuchAlgorithmException | NoSuchPaddingException | InvalidKeyException | IOException | IllegalBlockSizeException | BadPaddingException e) {e.printStackTrace();}//如果有错就返加nulllreturn null;}public static void main(String[] args) {Scanner scanner=new Scanner(System.in);/** 加密*/System.out.println("使用AES对称加密,请输入加密的规则");String encodeRules=scanner.next();System.out.println("请输入要加密的内容:");String content = scanner.next();System.out.println("根据输入的规则"+encodeRules+"加密后的密文是:"+ AESEncode(encodeRules, content));/** 解密*/System.out.println("使用AES对称解密,请输入加密的规则:(须与加密相同)");encodeRules=scanner.next();System.out.println("请输入要解密的内容(密文):");content = scanner.next();System.out.println("根据输入的规则"+encodeRules+"解密后的明文是:"+ AESDncode(encodeRules, content));}}

3.UDF函数

package com.zmlearn.udf;
import org.apache.hadoop.hive.ql.exec.UDF;public class AESUDF extends UDF{String password = "8DFC34B0B7C98EFA0A299A6C3FFFBD9D";public String evaluate ( String type , String content) throws Exception {if (content == null) return null;if(! type.equals("encode") && ! type.equals("decode")){throw new Exception("Parmeter one is needed encode/decode");}if( type.equals("encode")){//进行加密return AES.AESEncode (password, content);}else {//进行解密return AES.AESDncode(password, content);}}public static void main(String[] args) {try {System.out.println(new AESUDF().evaluate("encode","test"));System.out.println(new AESUDF().evaluate("decode","bkP4HSbPbL+yqViBjfvQJg=="));} catch (Exception e) {e.printStackTrace();}}
}

2.将打好的jar上传到hdfs

1.打包步骤

点击idea的Maven后,点击package。如下图

2.将打包后的udf-1.0-SNAPSHOT.jar,上传到hdfs上面

#一定记得,不然创建函数的时候会报警Class com.zmlearn.udf.AESUDF not found,因为没有执行权限
chmod 777 /tmp/udf-1.0-SNAPSHOT.jarhadoop fs -mkdir /hive_UDFhadoop fs -put /root/data/udf-1.0-SNAPSHOT.jar /hive_UDF

3.进入hive客户端,创建UDF函数。

create function AES_UDF as 'com.zmlearn.udf.AESUDF' using jar
'hdfs://nameservice1/hive_UDF/udf-1.0-SNAPSHOT.jar';

4.使用创建的UDF函数:

1.加密

insert overwrite table test2 partition(dt='2020-06-01')
select AES_UDF('encode',dnum),AES_UDF('encode',sn) from test1

2.解密

insert overwrite table test1 partition(dt='2020-06-01')
select AES_UDF('decode',dnum),AES_UDF('decode',sn) from test2

创建hive的AES加密解密函数相关推荐

  1. ios java aes_PHP7 AES加密解密函数_兼容ios/andriod/java对等加解密

    **PHP7.0 7.1 7.2 7.3 AES对等加解密类 函数文件_兼容ios/andriod/java等** 由于新项目规划要求使用PHP7.2开发环境,但在部分新系统中仍需使用AES加解密方式 ...

  2. C语言实现AES加密解密

    AES加密是美国联邦政府采用的一种块加密标准,如今已经被全世界广为使用.嵌入式开发中我们也经常会用到加密解密算法,如果没有硬件模块来实现,就需要用到C代码软件实现.下面介绍调用mbedTLS中的AES ...

  3. AES加密解密python实现

    1.前言 关于现代密码学算法,可以查看以下博客全面了解 CISSP考试要求里的"应用密码学"内容辅助记忆趣味串讲_晓翔仔的博客-CSDN博客 AES的细节知识,可以查阅 AES加密 ...

  4. c++实现AES加密解密算法

    本文讲解c++实现AES加密解密功能,主要包含两部分: 实现AES加密解密功能的静态库 实现调用静态库的测试文件 本文代码是在win10系统,VS2013下调试. 一.AES加解密静态库 创建静态库工 ...

  5. android、ios、php之间AES加密解密

    使用原因: 因为在项目中,需要在与客户端(IOS,Android)交互的时候,保存一些私有信息,不被别人看到,所以,使用了比较流行的可以反向加解密的AES. PHP 源码 <?php$aes = ...

  6. python 加密解密_python实现AES加密解密

    本文实例为大家分享了python实现AES加密解密的具体代码,供大家参考,具体内容如下 (1)对于AES加密解密相关知识 (2)实现的功能就是输入0-16个字符,然后经过AES的加密解密最后可以得到原 ...

  7. openssl与cryptoAPI交互AES加密解密

    原文: http://blog.csdn.net/zhouyuqwert/article/details/7422467 有读者指出代码贴两遍,修改下. 继上次只有CryptoAPI的加密后,这次要实 ...

  8. AES加密解密SHA1、SHA加密MD5加密

    AES加密解密 SHA1.SHA加密 MD5加密 二话不说马上附上代码: package com.luo.util; import java.io.UnsupportedEncodingExcepti ...

  9. AES加密解密算法的C代码实现

     AES 加密解密的原理我就不说了, 弟兄们自己上百度去查, 文章很多. 我这里只列出从网上获取的代码的实现, 我修改了一些, 可以很方便的使用到你的代码里面. AES 比DES算法的强度更强.A ...

最新文章

  1. 雍正继承帝位,给职场中的我们的启示 --- 我看电视剧《雍正王朝》
  2. 比特币耶稣Roger Ver:比特币现金是比特币扩容问题的答案
  3. js小效果-简易计算器
  4. oracle 账户 锁定 密码忘记了,Oracle System密码忘记 密码修改、删除账号锁定lock
  5. Mr.J--验证码登陆模块
  6. java判断回文用valueof_判断回文数,利用String类
  7. 阻塞和非阻塞(串口自环测试失败原因定位)
  8. Android Bitmap保存时背景变为黑色的问题
  9. 乐谱xml文件转为VOCALOID3的输入文件格式vsqx
  10. 海康摄像头监控预览二开,萤石云对接说明
  11. 上海财经应用统计考python_20上财应用统计415分经验帖(初试第一)
  12. Excel·VBA合并工作簿
  13. python让solidworks自动建模_让机器学习自动帮我们建模,这4个Python库能让你大开眼界...
  14. app门户开发——recycleView的页面的点击跳转
  15. Java选择题考试系统
  16. 【原创】畅言实现单点登录的设计流程和技术细节(1/2)
  17. Spring 5 + Spring MVC 5 + MyBatis 3 的 Maven 项目集成
  18. Unity3D之AssetBundle资源加载封装
  19. Log - Log日志入参
  20. 会议管理系统怎么加录播服务器,Teams会议视频怎么录制?这三种方法你知道吗...

热门文章

  1. android 自定义属性
  2. 阿里云的应用(day02)
  3. 天翼云云主机快照、云硬盘备份、云主机备份之间的区别
  4. 任意重循环(循环阶数不定、循环层数不定)
  5. oracle10G 异构方式迁移表空间之二
  6. Heartbeat 与Corosync对比分析
  7. 专访HTML5 Boilerplate项目核心成员——石川
  8. 创业前期怎么做个简单易行的计划?
  9. openGL es2.0 粒子系统之烟花
  10. 计算机组装与维护考试题a卷,计算机组装与维护考试题A卷.docx