首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spark和javax.crypto

Spark和javax.crypto
EN

Stack Overflow用户
提问于 2020-02-25 21:53:28
回答 1查看 146关注 0票数 0

我正在尝试学习加密,我想出了以下代码

代码语言:javascript
复制
import java.util.Base64
object JavaCryptoEncryption{

  val Algorithm = "AES/CBC/PKCS5Padding"
  val IvSpec = new IvParameterSpec(new Array[Byte](16))

  def encrypt(text: String, b64secret: String): String = {
    val cipher = Cipher.getInstance(Algorithm)
    val key = new SecretKeySpec(Base64.getDecoder.decode(b64secret), "AES")
    cipher.init(Cipher.ENCRYPT_MODE, key, IvSpec)

    new String(Base64.getEncoder.encode(cipher.doFinal(text.getBytes("utf-8"))), "utf-8")
  }

  def decrypt(text: String, b64secret: String): String = {
    val cipher = Cipher.getInstance(Algorithm)
    val key = new SecretKeySpec(Base64.getDecoder.decode(b64secret), "AES")
    cipher.init(Cipher.DECRYPT_MODE, key, IvSpec)

    new String(cipher.doFinal(Base64.getDecoder.decode(text.getBytes("utf-8"))), "utf-8")
  }
}

在我的系统中的其他地方,我定义并存储密钥。然后,我将JavaCryptoEncryption.encryptJavaCryptoEncryption.decrypt应用于字符串值,它可以很好地工作。但是,当我想要将它们转换为UDF并应用于DataFrame的列时,我会得到org.apache.spark.SparkException: Task not serializable。类似的代码(不含iv)适用于AES/ECB/PKCS5Padding.是否某些模式不支持并行?有没有附近的路?或者可能有不同的原因?

EN

回答 1

Stack Overflow用户

发布于 2020-02-26 00:14:54

也许,可以尝试将所有与对象创建相关的代码放在UDF本身中,并仅将键作为UDF参数提供?这样,您将只需要向workers发送一个String,因此应该不会出现序列化问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60396240

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档