Example usage for javax.crypto Cipher getOutputSize

List of usage examples for javax.crypto Cipher getOutputSize

Introduction

In this page you can find the example usage for javax.crypto Cipher getOutputSize.

Prototype

public final int getOutputSize(int inputLen) 

Source Link

Document

Returns the length in bytes that an output buffer would need to be in order to hold the result of the next update or doFinal operation, given the input length inputLen (in bytes).

Usage

From source file:MainClass.java

public static void main(String[] args) throws Exception {
    Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());

    SecureRandom random = new SecureRandom();
    IvParameterSpec ivSpec = createCtrIvForAES();
    Key key = createKeyForAES(256, random);
    Cipher cipher = Cipher.getInstance("AES/CTR/NoPadding", "BC");
    String input = "12345678";
    Mac mac = Mac.getInstance("DES", "BC");
    byte[] macKeyBytes = new byte[] { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08 };
    Key macKey = new SecretKeySpec(macKeyBytes, "DES");

    cipher.init(Cipher.ENCRYPT_MODE, key, ivSpec);

    byte[] cipherText = new byte[cipher.getOutputSize(input.length() + mac.getMacLength())];

    int ctLength = cipher.update(input.getBytes(), 0, input.length(), cipherText, 0);

    mac.init(macKey);/*from  w w w.  j a v  a2 s.c om*/
    mac.update(input.getBytes());

    ctLength += cipher.doFinal(mac.doFinal(), 0, mac.getMacLength(), cipherText, ctLength);

    cipher.init(Cipher.DECRYPT_MODE, key, ivSpec);

    byte[] plainText = cipher.doFinal(cipherText, 0, ctLength);
    int messageLength = plainText.length - mac.getMacLength();

    mac.init(macKey);
    mac.update(plainText, 0, messageLength);

    byte[] messageHash = new byte[mac.getMacLength()];
    System.arraycopy(plainText, messageLength, messageHash, 0, messageHash.length);

    System.out.println("plain : " + new String(plainText) + " verified: "
            + MessageDigest.isEqual(mac.doFinal(), messageHash));

}

From source file:MainClass.java

public static void main(String[] args) throws Exception {
    Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
    byte[] input = "www.java2s.com".getBytes();
    byte[] keyBytes = new byte[] { 0x01, 0x23, 0x45, 0x67, (byte) 0x89, (byte) 0xab, (byte) 0xcd, (byte) 0xef };
    byte[] msgNumber = new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };

    IvParameterSpec zeroIv = new IvParameterSpec(new byte[8]);
    SecretKeySpec key = new SecretKeySpec(keyBytes, "DES");
    Cipher cipher = Cipher.getInstance("DES/CBC/PKCS7Padding", "BC");
    System.out.println("input : " + new String(input));

    // encryption pass
    cipher.init(Cipher.ENCRYPT_MODE, key, zeroIv);
    IvParameterSpec encryptionIv = new IvParameterSpec(cipher.doFinal(msgNumber), 0, 8);

    // encrypt message
    cipher.init(Cipher.ENCRYPT_MODE, key, encryptionIv);
    byte[] cipherText = new byte[cipher.getOutputSize(input.length)];
    int ctLength = cipher.update(input, 0, input.length, cipherText, 0);
    ctLength += cipher.doFinal(cipherText, ctLength);
    System.out.println("cipher: " + new String(cipherText) + " bytes: " + ctLength);
    cipher.init(Cipher.ENCRYPT_MODE, key, zeroIv);
    IvParameterSpec decryptionIv = new IvParameterSpec(cipher.doFinal(msgNumber), 0, 8);

    // decrypt message

    cipher.init(Cipher.DECRYPT_MODE, key, decryptionIv);
    byte[] plainText = new byte[cipher.getOutputSize(ctLength)];
    int ptLength = cipher.update(cipherText, 0, ctLength, plainText, 0);
    ptLength += cipher.doFinal(plainText, ptLength);
    System.out.println("plain : " + new String(plainText) + " bytes: " + ptLength);
}

From source file:MainClass.java

public static void main(String[] args) throws Exception {
    Security.addProvider(new BouncyCastleProvider());
    SecureRandom random = new SecureRandom();
    IvParameterSpec ivSpec = createCtrIvForAES(1, random);
    Key key = createKeyForAES(256, random);
    Cipher cipher = Cipher.getInstance("AES/CTR/NoPadding", "BC");
    String input = "www.java2s.com";
    Mac mac = Mac.getInstance("DES", "BC");
    byte[] macKeyBytes = "12345678".getBytes();
    Key macKey = new SecretKeySpec(macKeyBytes, "DES");
    System.out.println("input : " + input);

    // encryption step
    cipher.init(Cipher.ENCRYPT_MODE, key, ivSpec);
    byte[] cipherText = new byte[cipher.getOutputSize(input.length() + mac.getMacLength())];
    int ctLength = cipher.update(input.getBytes(), 0, input.length(), cipherText, 0);
    mac.init(macKey);//w  w  w.  ja  v a  2 s .  c o m
    mac.update(input.getBytes());
    ctLength += cipher.doFinal(mac.doFinal(), 0, mac.getMacLength(), cipherText, ctLength);
    System.out.println("cipherText : " + new String(cipherText));

    // decryption step
    cipher.init(Cipher.DECRYPT_MODE, key, ivSpec);
    byte[] plainText = cipher.doFinal(cipherText, 0, ctLength);
    int messageLength = plainText.length - mac.getMacLength();

    mac.init(macKey);
    mac.update(plainText, 0, messageLength);

    byte[] messageHash = new byte[mac.getMacLength()];
    System.arraycopy(plainText, messageLength, messageHash, 0, messageHash.length);

    System.out.println("plain : " + new String(plainText) + " verified: "
            + MessageDigest.isEqual(mac.doFinal(), messageHash));
}

From source file:MainClass.java

public static void main(String[] args) throws Exception {
    Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
    byte[] input = "www.java2s.com".getBytes();

    byte[] ivBytes = new byte[] { 0x00, 0x00, 0x00, 0x01, 0x04, 0x05, 0x06, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00,
            0x00, 0x00, 0x01 };/*from   ww w .ja  va 2 s. co m*/

    Cipher cipher = Cipher.getInstance("AES/CTR/NoPadding", "BC");
    KeyGenerator generator = KeyGenerator.getInstance("AES", "BC");

    generator.init(192);

    Key encryptionKey = generator.generateKey();

    System.out.println("key   : " + Utils.toHex(encryptionKey.getEncoded()));
    System.out.println("input : " + new String(input));

    // encryption pass
    cipher.init(Cipher.ENCRYPT_MODE, encryptionKey, new IvParameterSpec(ivBytes));
    byte[] cipherText = new byte[cipher.getOutputSize(input.length)];
    int ctLength = cipher.update(input, 0, input.length, cipherText, 0);
    ctLength += cipher.doFinal(cipherText, ctLength);

    // decryption pass
    Key decryptionKey = new SecretKeySpec(encryptionKey.getEncoded(), encryptionKey.getAlgorithm());
    cipher.init(Cipher.DECRYPT_MODE, decryptionKey, new IvParameterSpec(ivBytes));
    byte[] plainText = new byte[cipher.getOutputSize(ctLength)];
    int ptLength = cipher.update(cipherText, 0, ctLength, plainText, 0);
    ptLength += cipher.doFinal(plainText, ptLength);
    System.out.println("plain : " + new String(plainText) + " bytes: " + ptLength);
}

From source file:nu.yona.server.crypto.CryptoUtil.java

/**
 * Encrypts the given plaintext bytes./*from ww  w.j a v  a2  s. co m*/
 * 
 * @param plaintext the bytes to be encrypted
 * @return the encrypted bytes, with the crypto variant number prepended to it.
 */
public static byte[] encrypt(byte cryptoVariantNumber, Cipher cipher, byte[] plaintext) {
    try {
        byte[] ciphertext = new byte[cipher.getOutputSize(plaintext.length) + CRYPTO_VARIANT_NUMBER_LENGTH];
        setCryptoVariantNumber(cryptoVariantNumber, ciphertext);
        int bytesStored = cipher.doFinal(plaintext, 0, plaintext.length, ciphertext, 1);
        if (bytesStored != ciphertext.length - CRYPTO_VARIANT_NUMBER_LENGTH) {
            ciphertext = Arrays.copyOf(ciphertext, ciphertext.length + CRYPTO_VARIANT_NUMBER_LENGTH);
        }
        return ciphertext;
    } catch (IllegalBlockSizeException | BadPaddingException | ShortBufferException e) {
        throw CryptoException.encryptingData(e);
    }
}

From source file:org.gumtree.security.EncryptionUtils.java

public static String encryptBase64(String input, String key, String iv) throws Exception {
    byte[] inputBytes = input.getBytes();
    SecretKeySpec keySpec = new SecretKeySpec(key.getBytes(), "DES");
    IvParameterSpec ivSpec = new IvParameterSpec(iv.getBytes());
    Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");
    cipher.init(Cipher.ENCRYPT_MODE, keySpec, ivSpec);
    byte[] encrypted = new byte[cipher.getOutputSize(inputBytes.length)];
    int enc_len = cipher.update(inputBytes, 0, inputBytes.length, encrypted, 0);
    enc_len += cipher.doFinal(encrypted, enc_len);
    return new String(Base64.encodeBase64(encrypted));
}

From source file:org.gumtree.security.EncryptionUtils.java

public static String decryptBase64(String encrytedBase64String, String key, String iv) throws Exception {
    byte[] data = Base64.decodeBase64(encrytedBase64String.getBytes());
    SecretKeySpec keySpec = new SecretKeySpec(key.getBytes(), "DES");
    IvParameterSpec ivSpec = new IvParameterSpec(iv.getBytes());
    Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");
    cipher.init(Cipher.DECRYPT_MODE, keySpec, ivSpec);
    byte[] decrypted = new byte[cipher.getOutputSize(data.length)];
    int dec_len = cipher.update(data, 0, data.length, decrypted, 0);
    dec_len += cipher.doFinal(decrypted, dec_len);
    return new String(decrypted).trim();
}

From source file:AESTest.java

/**
 * Uses a cipher to transform the bytes in an input stream and sends the transformed bytes to an
 * output stream./* w  w  w  .j a v a2  s. co  m*/
 * @param in the input stream
 * @param out the output stream
 * @param cipher the cipher that transforms the bytes
 */
public static void crypt(InputStream in, OutputStream out, Cipher cipher)
        throws IOException, GeneralSecurityException {
    int blockSize = cipher.getBlockSize();
    int outputSize = cipher.getOutputSize(blockSize);
    byte[] inBytes = new byte[blockSize];
    byte[] outBytes = new byte[outputSize];

    int inLength = 0;
    boolean more = true;
    while (more) {
        inLength = in.read(inBytes);
        if (inLength == blockSize) {
            int outLength = cipher.update(inBytes, 0, blockSize, outBytes);
            out.write(outBytes, 0, outLength);
        } else
            more = false;
    }
    if (inLength > 0)
        outBytes = cipher.doFinal(inBytes, 0, inLength);
    else
        outBytes = cipher.doFinal();
    out.write(outBytes);
}

From source file:RSATest.java

/**
 * Uses a cipher to transform the bytes in an input stream and sends the transformed bytes to an
 * output stream.// ww  w .  j a v a 2  s .  c om
 * @param in the input stream
 * @param out the output stream
 * @param cipher the cipher that transforms the bytes
 */
public static void crypt(InputStream in, OutputStream out, Cipher cipher)
        throws IOException, GeneralSecurityException {
    int blockSize = cipher.getBlockSize();
    int outputSize = cipher.getOutputSize(blockSize);
    byte[] inBytes = new byte[blockSize];
    byte[] outBytes = new byte[outputSize];

    int inLength = 0;
    ;
    boolean more = true;
    while (more) {
        inLength = in.read(inBytes);
        if (inLength == blockSize) {
            int outLength = cipher.update(inBytes, 0, blockSize, outBytes);
            out.write(outBytes, 0, outLength);
        } else
            more = false;
    }
    if (inLength > 0)
        outBytes = cipher.doFinal(inBytes, 0, inLength);
    else
        outBytes = cipher.doFinal();
    out.write(outBytes);
}

From source file:nu.yona.server.crypto.CryptoUtil.java

/**
 * Decrypts the given ciphertext bytes.//from w w  w .  j  a v a 2s  .co m
 * 
 * @param ciphertext the bytes to be decrypted, with a leading crypto variant number
 * @return the decrypted bytes
 */
public static byte[] decrypt(byte cryptoVariantNumber, Cipher cipher, byte[] ciphertext) {
    try {
        assertValidCryptoVariantNumber(cryptoVariantNumber, ciphertext);
        byte[] plaintext = new byte[cipher.getOutputSize(ciphertext.length)];
        int bytesStored = cipher.doFinal(ciphertext, CRYPTO_VARIANT_NUMBER_LENGTH,
                ciphertext.length - CRYPTO_VARIANT_NUMBER_LENGTH, plaintext, 0);
        if (bytesStored != plaintext.length) {
            plaintext = Arrays.copyOf(plaintext, bytesStored);
        }
        return plaintext;
    } catch (IllegalBlockSizeException | BadPaddingException | ShortBufferException e) {
        throw CryptoException.decryptingData(e);
    }
}