最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spark?實(shí)現(xiàn)自定義加密的示例代碼

 更新時(shí)間:2024年07月18日 14:31:38   作者:Byyyi耀  
這篇文章主要介紹了Spark?實(shí)現(xiàn)自定義加密的示例代碼,代碼簡(jiǎn)單易懂,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧

Spark 實(shí)現(xiàn)自定義加密

一、建立加密和解密的自定義函數(shù)

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)={
    // 對(duì)密鑰長(zhǎng)度進(jìn)行約束
    val allowNumBits: Array[Int] = Array(16, 24, 32)
    // 如果密鑰長(zhǎng)度符合,將密鑰轉(zhuǎn)換為AES密鑰對(duì)象
    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(",")})")
    }
  }
  /**
   * 加密函數(shù)
   * @param src 源數(shù)據(jù)
   * @param secret 密鑰
   */
  def encrypt(src:String,secret:String)={
    // 獲取加密算法實(shí)例
    val cipher: Cipher = Cipher.getInstance("AES")
    // 初始化加密模式,使用給定的密鑰(需要先用key()對(duì)密鑰進(jìn)行處理)
    cipher.init(Cipher.ENCRYPT_MODE,secretInit(secret))
    // 執(zhí)行加密操作
    val bytes: Array[Byte] = cipher.doFinal(src.getBytes(StandardCharset.UTF_8))
    // 返回加密后的數(shù)據(jù)
    Base64.getEncoder().encodeToString(bytes)
  }
  /**
   * 解密函數(shù)
   * @param dest 待解密數(shù)據(jù)
   * @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 環(huán)境下導(dǎo)入對(duì)象實(shí)現(xiàn)的方法,并在 SparkSession 中注冊(cè) UDF 函數(shù)

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中調(diào)用函數(shù)

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()

到此這篇關(guān)于Spark 實(shí)現(xiàn)自定義加密的文章就介紹到這了,更多相關(guān)Spark 自定義加密內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • JDK8新特性之判空遍歷寫(xiě)法

    JDK8新特性之判空遍歷寫(xiě)法

    這篇文章主要介紹了JDK8新特性之判空遍歷寫(xiě)法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • SpringBoot 中的異步處理機(jī)制詳解

    SpringBoot 中的異步處理機(jī)制詳解

    本文介紹了異步處理的基礎(chǔ)配置、線(xiàn)程池的自定義以及常見(jiàn)應(yīng)用場(chǎng)景,在實(shí)際應(yīng)用中,異步處理可以有效提升應(yīng)用的性能,改善用戶(hù)體驗(yàn),但同時(shí)也需要我們合理管理線(xiàn)程池,確保系統(tǒng)資源的高效利用,感興趣的朋友跟隨小編一起看看吧
    2025-01-01
  • Java 通過(guò)位運(yùn)算求一個(gè)集合的所有子集方法

    Java 通過(guò)位運(yùn)算求一個(gè)集合的所有子集方法

    下面小編就為大家?guī)?lái)一篇Java 通過(guò)位運(yùn)算求一個(gè)集合的所有子集方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-03-03
  • springboot項(xiàng)目中常用的工具類(lèi)和api詳解

    springboot項(xiàng)目中常用的工具類(lèi)和api詳解

    在Spring Boot項(xiàng)目中,開(kāi)發(fā)者通常會(huì)依賴(lài)一些工具類(lèi)和API來(lái)簡(jiǎn)化開(kāi)發(fā)、提高效率,以下是一些常用的工具類(lèi)及其典型應(yīng)用場(chǎng)景,涵蓋 Spring 原生工具、第三方庫(kù)(如Hutool、Guava) 和 Java 自帶工具,本文給大家介紹springboot項(xiàng)目中常用的工具類(lèi)和api,感興趣的朋友一起看看吧
    2025-04-04
  • springmvc用于方法鑒權(quán)的注解攔截器的解決方案代碼

    springmvc用于方法鑒權(quán)的注解攔截器的解決方案代碼

    這篇文章主要介紹了springmvc用于方法鑒權(quán)的注解攔截器的解決方案代碼,具有一定借鑒價(jià)值,需要的朋友可以參考下。
    2017-12-12
  • java Nio使用NioSocket客戶(hù)端與服務(wù)端交互實(shí)現(xiàn)方式

    java Nio使用NioSocket客戶(hù)端與服務(wù)端交互實(shí)現(xiàn)方式

    這篇文章主要介紹了java Nio使用 NioSocket 客戶(hù)端與服務(wù)端交互實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • Java接口繼承和使用接口操作示例

    Java接口繼承和使用接口操作示例

    這篇文章主要介紹了Java接口繼承和使用接口操作,結(jié)合具體實(shí)例形式分析了Java接口繼承與使用的相關(guān)原理、操作技巧與注意事項(xiàng),需要的朋友可以參考下
    2019-09-09
  • 如何讓@EnableConfigurationProperties的值注入到@Value中

    如何讓@EnableConfigurationProperties的值注入到@Value中

    這篇文章主要介紹了如何讓@EnableConfigurationProperties的值注入到@Value中的實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-06-06
  • SpringBoot2.2.X用Freemarker出現(xiàn)404的解決

    SpringBoot2.2.X用Freemarker出現(xiàn)404的解決

    這篇文章主要介紹了SpringBoot2.2.X用Freemarker出現(xiàn)404的解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • Maven中<distributionManagement>的使用及說(shuō)明

    Maven中<distributionManagement>的使用及說(shuō)明

    本文主要介紹了Maven中的SNAPSHOT和RELEASE倉(cāng)庫(kù)的區(qū)別,以及如何在POM文件中配置和使用快照版本,快照版本可以實(shí)現(xiàn)實(shí)時(shí)更新,方便開(kāi)發(fā)過(guò)程中的依賴(lài)管理,同時(shí),本文還總結(jié)了Maven的一些常用命令及其作用
    2025-01-01

最新評(píng)論

新泰市| 河东区| 黎平县| 桂平市| 军事| 兰溪市| 富阳市| 含山县| 莒南县| 黔江区| 华容县| 益阳市| 连江县| 九江市| 宜丰县| 合山市| 天全县| 宜阳县| 宁安市| 且末县| 隆回县| 新干县| 米脂县| 凌云县| 洛宁县| 邯郸县| 太康县| 丁青县| 宁乡县| 罗山县| 普兰县| 凤城市| 鹤峰县| 保定市| SHOW| 潮安县| 永和县| 万宁市| 酒泉市| 柘城县| 海南省|