Spark 实现自定义加密
创始人
2024-12-26 13:06:17
0

在这里插入图片描述
在这里插入图片描述

文章目录

    • Spark 实现自定义加密
        • 一、建立加密和解密的自定义函数
        • 二、在 Spark 环境下导入对象实现的方法,并在 SparkSession 中注册 UDF 函数
        • 三、在SparkSQL中调用函数

Spark 实现自定义加密

一、建立加密和解密的自定义函数
import java.nio.charset.{StandardCharsets} import java.util.Base64 import javax.crypto.Cipher import javax.crypto.spec.SecretKeySpec  object SparkUtil { 	 /**    * 处理密钥    * @param secret 密钥    */   private def secretInit(secret:String)={     // 对密钥长度进行约束     val allowNumBits: Array[Int] = Array(16, 24, 32)     // 如果密钥长度符合,将密钥转换为AES密钥对象     if (allowNumBits.contains(secret.size)) {       new SecretKeySpec(           secret.getBytes(StandardCharsets.UTF_8),"AES")     }else{       throw new RuntimeException(           s"AES secret size of numBits ${secret.size} not in            permitted values (${allowNumBits.mkString(",")})")     }   }   /**    * 加密函数    * @param src 源数据    * @param secret 密钥    */   def encrypt(src:String,secret:String)={     // 获取加密算法实例     val cipher: Cipher = Cipher.getInstance("AES")     // 初始化加密模式,使用给定的密钥(需要先用key()对密钥进行处理)     cipher.init(Cipher.ENCRYPT_MODE,secretInit(secret))     // 执行加密操作     val bytes: Array[Byte] = cipher.doFinal(src.getBytes(StandardCharset.UTF_8))     // 返回加密后的数据     Base64.getEncoder().encodeToString(bytes)   }   /**    * 解密函数    * @param dest 待解密数据    * @param secret 密钥    */   def decrypt(dest:String,secret:String)={     val cipher: Cipher = Cipher.getInstance("AES")     cipher.init(Cipher.DECRYPT_MODE,secretInit(secret))     val bytes: Array[Byte] = cipher.doFinal(         Base64.getDecoder.decode(dest))     new String(bytes, StandardCharsets.UTF_8)   } } 
二、在 Spark 环境下导入对象实现的方法,并在 SparkSession 中注册 UDF 函数
import core.SparkUtil.{encrypt,decrypt} spark.udf.register(     "aes_encrypt",     (src:String,secret:String)      	=>encrypt(src, secret),StringType) spark.udf.register(     "aes_decrypt",     (src:String,secret:String)     	=>decrypt(src, secret),StringType) 
三、在SparkSQL中调用函数
val frm: DataFrame = spark.createDataFrame(Seq( 	Test(1,Array("money","freedom"),Map("java"->85,"mysql"->67)),   	Test(2,Array("beauty","beauty"),Map("java"->72,"mysql"->90)),   	Test(3,Array("sports","beauty"),Map("java"->76,"html"->52)) ))  val secret = "henryyb2211ariel"  val frmEncrypt: DataFrame = frm   .select($"id", 	callUDF( 	  "aes_encrypt", 	  array_join($"hobbies", ","), 	  lit(secret) 	).as("encrypted_hobbies")   )  val frmDecrypt: DataFrame = frmEncrypt   .select($"id", 	split( 	  callUDF( 		"aes_decrypt", 		$"encrypted_hobbies", 		lit(secret) 	  ), 	  "," 	).as("hobbies")   ).show() 

在这里插入图片描述

相关内容

热门资讯

科技新动态!开心跑得快有辅助工... 科技新动态!开心跑得快有辅助工具吗(透明挂)外挂透明挂辅助神器(2021已更新)(哔哩哔哩)1)开心...
4分钟实锤!吉祥麻将,微扑克切... 4分钟实锤!吉祥麻将,微扑克切实是真的有挂,介绍教程(有挂揭秘);一、吉祥麻将AI软件牌型概率发牌机...
实测发现!鄂州晃晃外 挂(透视... 实测发现!鄂州晃晃外 挂(透视)透视辅助工具(2021已更新)(哔哩哔哩)1、鄂州晃晃外 挂系统规律...
三分钟了解!好彩麻将怎样才可以... 三分钟了解!好彩麻将怎样才可以拿好牌(透视辅助)外挂透明挂辅助机制(2020已更新)(哔哩哔哩)1、...
九分钟辅助!斗棋辅助器在哪,w... 九分钟辅助!斗棋辅助器在哪,wepoker本来真的是有挂,教你攻略(有挂教程)1、下载好斗棋辅助器在...
记者揭秘!!广东雀神麻雀辅助器... 记者揭秘!!广东雀神麻雀辅助器在哪里下载(透视)透视辅助app(2020已更新)(哔哩哔哩)1、很好...
终于清楚!皮皮跑胡子输赢规律(... 终于清楚!皮皮跑胡子输赢规律(辅助挂)外挂透明挂辅助机制(2026已更新)(哔哩哔哩)1)皮皮跑胡子...
二分钟科普!花城牌舍系统规律,... 二分钟科普!花城牌舍系统规律,aAPOKER竟然存在有挂,揭秘教程(有挂插件)进入游戏-大厅左侧-新...
一分钟教你!心悦手机麻将辅牌器... 一分钟教你!心悦手机麻将辅牌器(透视辅助)外挂透视辅助挂(2024已更新)(哔哩哔哩)1、每一步都需...
科技新动态!四方河南麻将赢牌技... 科技新动态!四方河南麻将赢牌技巧(透视)外挂透明挂辅助神器(2026已更新)(哔哩哔哩)1、每一步都...