· 7 years ago · Oct 22, 2018, 03:42 AM
1javax.crypto.BadPaddingException: Given final block not properly padded
2 at com.sun.crypto.provider.CipherCore.doFinal(CipherCore.java:989)
3 at com.sun.crypto.provider.CipherCore.doFinal(CipherCore.java:845)
4 at com.sun.crypto.provider.AESCipher.engineDoFinal(AESCipher.java:446)
5 at javax.crypto.Cipher.doFinal(Cipher.java:2165)
6
7public String decrypt(byte[] cipherText, List<SecretKey> skList, List<IvParameterSpec> ivList){
8 Cipher cipherDe;
9
10 SecretKey secretKey;
11 IvParameterSpec ivSpec;
12
13 //byte[] cipherText = new byte[]{};
14 byte[] deciByte;
15
16 String decryptText = "";
17
18 try
19 {
20 cipherDe = Cipher.getInstance("AES/CBC/PKCS5Padding");
21
22 try
23 {
24 secretKey = skList.get(0);
25 ivSpec = ivList.get(0);
26 cipherDe.init(Cipher.DECRYPT_MODE, secretKey, ivSpec);
27
28 try
29 {
30 //De-cryption
31 deciByte = cipherDe.doFinal(cipherText);
32
33 decryptText = new String(deciByte);
34
35 return decryptText;
36 }
37
38 catch (IllegalBlockSizeException e)
39 {
40 e.printStackTrace();
41 }
42
43 catch (BadPaddingException e)
44 {
45 e.printStackTrace();
46 }
47 }
48
49 catch (InvalidKeyException e)
50 {
51 e.printStackTrace();
52 }
53
54 //De-cryption
55 catch (InvalidAlgorithmParameterException e1)
56 {
57 e1.printStackTrace();
58 }
59 }
60
61 catch (NoSuchAlgorithmException e)
62 {
63 e.printStackTrace();
64 }
65
66 catch (NoSuchPaddingException e)
67 {
68 e.printStackTrace();
69 }
70
71 return decryptText;
72 }
73
74public List getKeyGenerator(){
75
76 List<KeyGenerator> list = new ArrayList<KeyGenerator>();
77 KeyGenerator keyGenerator;
78 int keyBitSize = 128;
79
80 try
81 {
82 SecureRandom secureRandom = new SecureRandom();
83 keyGenerator = KeyGenerator.getInstance("AES");
84 keyGenerator.init(keyBitSize, secureRandom);
85
86 list.add(keyGenerator);
87
88 return list;
89 }
90 catch (NoSuchAlgorithmException e)
91 {
92 e.printStackTrace();
93 }
94
95 return list;
96 }
97
98 //Generates Secret Key value
99 public List getSecretKey(List<KeyGenerator> keygen) {
100
101 List<SecretKey> list = new ArrayList<SecretKey>();
102 KeyGenerator keyGenerator;
103 SecretKey secretKey;
104
105 keyGenerator = keygen.get(0);
106 secretKey = keyGenerator.generateKey();
107
108 list.add(secretKey);
109
110 return list;
111 }
112
113 //Generates IV Spec value
114 public List getIvSpec(List<SecretKey> secretKey) {
115List<IvParameterSpec> list = new ArrayList<IvParameterSpec>();
116 Cipher cipher;
117
118 byte[] iv;
119
120 try
121 {
122 cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
123
124 //De-crypting
125 iv = new byte[cipher.getBlockSize()];
126 IvParameterSpec ivSpec = new IvParameterSpec(iv);
127
128 list.add(ivSpec);
129 }
130
131 catch (NoSuchAlgorithmException e)
132 {
133 e.printStackTrace();
134 }
135
136 catch (NoSuchPaddingException e)
137 {
138 e.printStackTrace();
139 }
140
141 return list;
142 }
143
144//Crypto Cipher
145 CryptoHelperClass crypto = new CryptoHelperClass();
146 SecretKeyIVGen sk = new SecretKeyIVGen();
147 List<KeyGenerator> kgList = sk.getKeyGenerator();
148 List<SecretKey> skList = sk.getSecretKey(kgList);
149 List<IvParameterSpec> ivList = sk.getIvSpec
150
151//Where byteFruit is a byte[] value retrieved from my MySQL table
152
153crypto.decrypt(byteFruit, skList, ivList(skList);