Problem
recently decided to implement an Android AES encryption and decryption functions, but decrypted when reported abnormal.
javax.crypto.IllegalBlockSizeException: last block incomplete in decryption
org.bouncycastle.jce.provider.JCEBlockCipher.engineDoFinal (JCEBlockCipher.java: 711) at javax.crypto.Cipher.doFinal (Cipher.java: 100 )
estimation problem is the transmission time because the encoding data loss
Solution
the AES encrypted ciphertext then the whole base64 encryption, decoding base64 decrypt them first and then into the AES decryption, so we can guarantee acceptance correctness of the data and not missing.
but which comes with android but Base64 encryption and decryption error. (Do not know why)
then google the one, write your own Base64 encryption tools.
import java.io.ByteArrayOutputStream ;
public class Base64Util {
private static final char [] < / span> base64EncodeChars = new char [] { 'A' , 'B' , 'C' , 'D' , 'E' , 'F ' , ' G ' , 'H' , 'I' , 'J' < span style = "color: # e0eee0;">, 'K' , 'L' , 'M' , 'N' , 'O' , 'P' , 'Q' , 'R' , 'S' , 'T' , 'U' , 'V' , 'W' , 'X' < / span> , 'Y' , 'Z' , 'a' , 'b' , 'c' , 'd' , 'e ' , ' f ' , 'g' , 'h' , 'i' < span style = "color: # e0eee0;">, 'j' , 'k' , 'l' , 'm' , 'n' , 'o' , 'p' , 'q' , 'r' , 's' , 't' , 'u' , 'v' , 'w' < / span> , 'x' , 'y' , 'z' , '0 ' , '1 ' , '2 ' , '3 ' , '4' , '5 ' , '6 ' , '7' < span style = "color: # e0eee0;">, '8 ' , '9 ' , '+' , '/' };
private static byte [] base64DecodeChars < / span> = new byte [] { - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , < span style = "color: # e0eee0;"> - 1 , - 1 , - 1 , - 1 , < / span> - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 < span style = "color: # e0eee0;">, - 1 , - 1 , - 1 , - 1 < / span> , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , 62 < span style = "color: # e0eee0;">, - 1 , - 1 , - 1 , 63 , < / span> 52 , 53 , 54 , 55 , 56 , 57 , 58 , 59 , 60 , 61 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , < span style = "color: # e0eee0;"> - 1 , 0 , 1 , 2 , 3 , 4 < / span> , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 , 14 , 15 , 16 , 17 , 18 , 19 , 20 , 21 , 22 , 23 < span style = "color: # e0eee0;">, 24 , 25 , - 1 , - 1 , - < / span> 1 , - 1 , - 1 , - 1 , 26 , 27 , 28 , 29 , 30 , 31 , 32 , 33 , 34 , 35 , 36 , 37 , 38 , 39 < span style = "color: # e0eee0;">, 40 , 41 , 42 , 43 , 44 , 45 < / span> , 46 , 47 , 48 , 49 , 50 , 51 , - 1 , - 1 , - 1 , - 1 , - 1 };
private Base64Util () {
}
/ **
* encoded byte array to a string
*
* @ param data <span>
* /
public static String encode ( byte < / span> [] data <span>) {
StringBuffer sb = new StringBuffer ();
int len = data <span> . length ;
int i = 0 ;
int b1 , b2 , b3 ;
while ( i << / span> len ) {
b1 = data <span> [ i + +] & 0xff ;
if ( i == len ) {
sb . append ( base64EncodeChars [ < span style = "color: # e0eee0;"> b1 >>> 2 ]);
sb . append ( base64EncodeChars [( b1 & 0x3 ) <<< / span> 4 ]);
sb . append ( "==" );
break ;
}
b2 = data <span> [ i + +] & 0xff ;
if ( i == len ) {
sb . append ( base64EncodeChars [ < span style = "color: # e0eee0;"> b1 >>> 2 ]);
sb . append ( base64EncodeChars [(( b1 & 0x03 < / span>) <<< / span> 4 ) | (( b2 & 0xf0 ) >>> 4 ) ]);
sb . append ( base64EncodeChars [( b2 & 0x0f ) <<< / span> 2 ]);
sb . append ( "=" );
break ;
}
b3 = data <span> [ i + +] & 0xff ;
sb . append ( base64EncodeChars [ b1 >>> 2 ]);
sb .
没有评论:
发表评论