I haven't had problems using the API like that. Can you share code
that actually compiles? There are some missing parameters in the code
you posted that might make a difference.

e.g. what's the size of the output buffer (decoded).

On Thu, Feb 9, 2017 at 2:41 PM, Dan Quaroni <[email protected]> wrote:
> I've posted this at SO as well where it has nicer formatting, but I'll
> include the question here as well.  See
> http://stackoverflow.com/questions/42147559/java-cryptocipher-doesnt-consume-all-input-bytes
>
> I'm trying to convert from using Chilkat's proprietary decryption library
> to Apache's commons codec.
>
> I have 2 example encrypted inputs I'm working with. The first is 16 bytes
> and the second is 96 bytes. The first one works great, but on the second
> one the CryptoCipher doesn't appear to be consuming the last 16 bytes.
>
> Here's some example code of the setup and decryption and the output:
>
>    Properties properties = new Properties();
>     CryptoCipher crypt =
> CryptoCipherFactory.getCryptoCipher("AES/CBC/PKCS5Padding", properties);
>     MessageDigest digest = MessageDigest.getInstance("SHA-256");
>
>     byte[] hashedKeyBytes = digest.digest("SHARED_SECRET".getBytes(
>             StandardCharsets.UTF_8));
>     MessageDigest ivDigest = MessageDigest.getInstance("MD5");
>
>     byte[] ivBytes =
> ivDigest.digest("SHARED_SECRET".getBytes(StandardCharsets.UTF_8));
>     final SecretKeySpec key = new SecretKeySpec(hashedKeyBytes, "AES");
>     IvParameterSpec iv = new IvParameterSpec(ivBytes);
>
>     crypt.init(Cipher.DECRYPT_MODE, key, iv);
>
>     ByteBuffer encBuffer = ByteBuffer.allocateDirect(enc.length);
>     System.out.println("--" + enc.length);
>     encBuffer.put(enc);
>     encBuffer.flip();
>     System.out.println("encln " + encBuffer.limit());
>
>     ByteBuffer decoded = ByteBuffer.allocateDirect(bufferSize);
>     CryptoCipher crypt = init();
>
>     System.out.println("consume " + crypt.update(encBuffer, decoded));
>     System.out.println("finish " + crypt.doFinal(encBuffer, decoded));
>     decoded.flip();
>     return asString(decoded);
>
> This produces these 2 outputs for the 2 inputs:
>
> Short input:
>
> --16
> encln 16
> consume 0
> finish 13
> Long input:
>
> --96
> encln 96
> consume 80
> finish 3
>
> As you can see it's only consuming 80 bytes out of the input... Since the
> shorter input produces the correct output as compared to what Chilkat
> produced, I'm not sure where to approach this to get it to work with the
> longer input.
>
> When I print out the string representation of the decrypted contents, there
> are 33 characters missing from the end that should be there.



-- 
Marcelo

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to