Scala cipher AES解密不起作用--有条件地无法解密文件--填充错误

Scala cipher AES解密不起作用--有条件地无法解密文件--填充错误,scala,encryption,error-handling,aes,padding,Scala,Encryption,Error Handling,Aes,Padding,Scala 2.11.8,加密帮助。。。这遵循了的原则,并给出了一个错误(javax.crypto.BadPaddingException:给定的最后一个块没有正确填充)。我知道错误的原因,但是,我需要帮助来处理它注意:单独执行解密代码时会发生错误(即,在不同的窗口、单独的spark shell实例上)。加密和解密在同一实例中时很少发生错误。。。salt和IvSpec被复制到单独的实例中——如最后所示(注意:我已经验证了这两个实例中的字节是相同的) 当解密代码在单独的java进程中执行时,这肯定

Scala 2.11.8,加密帮助。。。这遵循了的原则,并给出了一个错误(javax.crypto.BadPaddingException:给定的最后一个块没有正确填充)。我知道错误的原因,但是,我需要帮助来处理它注意:单独执行解密代码时会发生错误(即,在不同的窗口、单独的spark shell实例上)。加密和解密在同一实例中时很少发生错误。。。salt和IvSpec被复制到单独的实例中——如最后所示(注意:我已经验证了这两个实例中的字节是相同的)

当解密代码在单独的java进程中执行时,这肯定会产生错误(错误与填充有关)。当加密和解密在同一个脚本中完成时(例如,如果在同一个实例中执行,则在大多数情况下(95%+),这种方法都有效。如果通过在单独的窗口/进程/线程/java实例中获取salt和IvSpec来分别进行解密,则解密将失败

error is java.io.IOException: javax.crypto.BadPaddingException: Given final block not properly padded
  at javax.crypto.CipherInputStream.getMoreData(CipherInputStream.java:121)
  at javax.crypto.CipherInputStream.read(CipherInputStream.java:239)
  at javax.crypto.CipherInputStream.read(CipherInputStream.java:215)
  at decrypt3(<console>:81)
  ... 60 elided
Caused by: javax.crypto.BadPaddingException: Given final block not properly padded
  at com.sun.crypto.provider.CipherCore.doFinal(CipherCore.java:991)
  at com.sun.crypto.provider.CipherCore.doFinal(CipherCore.java:847)
  at com.sun.crypto.provider.AESCipher.engineDoFinal(AESCipher.java:446)
  at javax.crypto.Cipher.doFinal(Cipher.java:2047)
  at javax.crypto.CipherInputStream.getMoreData(CipherInputStream.java:118)
  ... 63 more
错误为java.io.IOException:javax.crypto.BadPaddingException:给定的最后一个块未正确填充
位于javax.crypto.CipherInputStream.getMoreData(CipherInputStream.java:121)
在javax.crypto.cipheriputstream.read(cipheriputstream.java:239)
在javax.crypto.cipheriputstream.read(cipheriputstream.java:215)
在第3点(:81)
... 60省略
原因:javax.crypto.BadPaddingException:给定的最后一个块未正确填充
位于com.sun.crypto.provider.CipherCore.doFinal(CipherCore.java:991)
位于com.sun.crypto.provider.CipherCore.doFinal(CipherCore.java:847)
在com.sun.crypto.provider.aesciper.engineDoFinal上(aesciper.java:446)
位于javax.crypto.Cipher.doFinal(Cipher.java:2047)
位于javax.crypto.CipherInputStream.getMoreData(CipherInputStream.java:118)
... 63多

是否有比其他字符串更可靠或更不可靠的字符串?我没有特别注意到--这些只是一组带有字母数字值的csv文件。
错误与填充有关
如果IV或密钥错误,则会出现此异常,因为解密的值会导致填充无效。注意:拥有zero IV真的不安全。我想说不同的实例使用不同的(随机)salt生成不同的密钥(尝试调试和打印使用过的salt,IV amd密钥)打印salt(和Ivspec分别)确认这些字节与我用于加密和解密的字节相同。。。如果它们不同,那么它在同一个实例中根本不起作用——在该实例中它起作用(但在大约6%的情况下随机失效)
error is java.io.IOException: javax.crypto.BadPaddingException: Given final block not properly padded
  at javax.crypto.CipherInputStream.getMoreData(CipherInputStream.java:121)
  at javax.crypto.CipherInputStream.read(CipherInputStream.java:239)
  at javax.crypto.CipherInputStream.read(CipherInputStream.java:215)
  at decrypt3(<console>:81)
  ... 60 elided
Caused by: javax.crypto.BadPaddingException: Given final block not properly padded
  at com.sun.crypto.provider.CipherCore.doFinal(CipherCore.java:991)
  at com.sun.crypto.provider.CipherCore.doFinal(CipherCore.java:847)
  at com.sun.crypto.provider.AESCipher.engineDoFinal(AESCipher.java:446)
  at javax.crypto.Cipher.doFinal(Cipher.java:2047)
  at javax.crypto.CipherInputStream.getMoreData(CipherInputStream.java:118)
  ... 63 more