当前位置: 代码网 > it编程>编程语言>Java > Spark 实现自定义加密的示例代码

Spark 实现自定义加密的示例代码

2024年07月18日 Java 我要评论
spark 实现自定义加密一、建立加密和解密的自定义函数import java.nio.charset.{standardcharsets}import java.util.base64import

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

到此这篇关于spark 实现自定义加密的文章就介绍到这了,更多相关spark 自定义加密内容请搜索3w代码以前的文章或继续浏览下面的相关文章希望大家以后多多支持3w代码!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com