解析从Salesforce获取数据时获取加密错误

时间:2017-03-16 14:55:29

标签: java

  

[在db中持久保存/更新销售人员数据时出错:00530000000dXXnAAM]   java.lang.Exception:javax.crypto.IllegalBlockSizeException文本:   “id”:“0011300001iidq1AAA”,“name”:“Svebo Sveis L ???? ft Svein V Bondal”,“sic”:0   消息:>输入长度不是8个字节的倍数。 com.sun.crypto.provider.CipherCore.finalNoPadding(CipherCore.java:1016)   在com.sun.crypto.provider.CipherCore.doFinal(CipherCore.java:984)   在com.sun.crypto.provider.CipherCore.doFinal(CipherCore.java:824)   在com.sun.crypto.provider.DESedeCipher.engineDoFinal(DESedeCipher.java:294)   在javax.crypto.Cipher.doFinal(Cipher.java:2165)

这里是我正在使用的代码,顺便说一下,它在大多数情况下工作但是没有输入如上所述。

 for encryption

{

// create a cipher using a key to initialize it
Cipher cipher = Cipher.getInstance("DESede/CBC/NoPadding");
cipher.init(Cipher.ENCRYPT_MODE, key, iv);

// perform the actual encryption
byte[] ciphertext = cipher.doFinal(text);

return ciphertext;
}

   for decryption 
 {
// create a cipher using a key to initialize it
Cipher cipher = Cipher.getInstance("DESede/CBC/NoPadding");
cipher.init(Cipher.DECRYPT_MODE, key, iv);

// perform the decryption
byte[] decryptedText = cipher.doFinal(text);

return decryptedText;
}

1 个答案:

答案 0 :(得分:1)

错误非常明确:输入长度不是8字节的倍数

您已指定NOPadding,将其更改为PKCS5Padding

DES是一种基于块的加密算法,因此输入必须是块大小的精确倍数,DES为8字节。当输入不是总是时,必须添加精确的多个填充,这是让实现通过指定填充(通常为DES的PKCS#5)为您执行此操作的最简单方法。

注1:
代码有"DESede/CBC/NOPadding",有拼写错误,应为"DESede/CBC/NoPadding",请参阅Class Cipher

注2:
最好不要使用3DES,不应该在新工作中使用它,而是使用当前的标准:AES。