/** * Convert an array of characters to an array of bytes using UTF8 encoding. * * @param chars Array of characters * @return Byte array */ @NotNull public static byte[] toBytes(@NotNull char[] chars) { return toBytes(chars, false); }
public static char[] toChars(@NotNull byte[] data) { return toChars(data, false); }
/** * fill the array with zeros * * @param data Data to zero */ public static void zero(ByteBuffer data) { zero(data.array()); } }
private byte[] crypt(@NotNull String cipherAlgorithm, @NotNull java.security.Key key, @NotNull byte[] data, boolean encrypt) throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException { try { Cipher cipher = Cipher.getInstance(cipherAlgorithm); if (cipherAlgorithm.startsWith("AES/CBC")) { if (encrypt) { byte[] iv = CryptoUtils.genSalt(16); cipher.init(Cipher.ENCRYPT_MODE, key, new IvParameterSpec(iv)); final byte[] encryptedData = cipher.doFinal(data); return ArrayUtils.concat(iv, encryptedData); } else { CryptoUtils.DataAndSalt dataAndSalt = CryptoUtils.splitSalt(data, 16); cipher.init(Cipher.DECRYPT_MODE, key, new IvParameterSpec(dataAndSalt.getSalt())); return cipher.doFinal(dataAndSalt.getData()); } } else { cipher.init(encrypt ? Cipher.ENCRYPT_MODE : Cipher.DECRYPT_MODE, key); return cipher.doFinal(data); } } catch (InvalidAlgorithmParameterException e) { throw new UnexpectedException(e); } }
/** * fill the array with zeros * * @param data Data to zero */ public static void zero(CharBuffer data) { zero(data.array()); }
/** * Convert an array of characters to an array of bytes using UTF8 encoding. * * @param chars Array of characters * @return Byte array */ @NotNull public static byte[] toBytes(@NotNull char[] chars) { return toBytes(chars, false); }
public static char[] toChars(@NotNull byte[] data) { return toChars(data, false); }
/** * fill the array with zeros * * @param data Data to zero */ public static void zero(ByteBuffer data) { zero(data.array()); } }
/** * fill the array with zeros * * @param data Data to zero */ public static void zero(CharBuffer data) { zero(data.array()); }
/** * Convert an array of bytes to an array of chars using UTF8 encoding * * @param data Array of characters * @param zeroBuffer Zero the temporary buffer * @return Byte array */ @NotNull public static char[] toChars(@NotNull byte[] data, boolean zeroBuffer) { ByteBuffer byteBuffer = ByteBuffer.wrap(data); CharBuffer charBuffer = Charset.forName("UTF-8").decode(byteBuffer); char[] chars = Arrays.copyOfRange(charBuffer.array(), charBuffer.position(), charBuffer.limit()); if (zeroBuffer) { zero(charBuffer); } return chars; }
/** * Convert an array of characters to an array of bytes using UTF8 encoding. * * @param chars Array of characters * @param zeroBuffer Zero the temporary buffer * @return Byte array */ @NotNull public static byte[] toBytes(@NotNull char[] chars, boolean zeroBuffer) { CharBuffer charBuffer = CharBuffer.wrap(chars); ByteBuffer byteBuffer = Charset.forName("UTF-8").encode(charBuffer); byte[] bytes = Arrays.copyOfRange(byteBuffer.array(), byteBuffer.position(), byteBuffer.limit()); if (zeroBuffer) { zero(byteBuffer); } return bytes; }
/** * Convert an array of characters to an array of bytes using UTF8 encoding. * * @param chars Array of characters * @param zeroBuffer Zero the temporary buffer * @return Byte array */ @NotNull public static byte[] toBytes(@NotNull char[] chars, boolean zeroBuffer) { CharBuffer charBuffer = CharBuffer.wrap(chars); ByteBuffer byteBuffer = Charset.forName("UTF-8").encode(charBuffer); byte[] bytes = Arrays.copyOfRange(byteBuffer.array(), byteBuffer.position(), byteBuffer.limit()); if (zeroBuffer) { zero(byteBuffer); } return bytes; }
/** * Convert an array of bytes to an array of chars using UTF8 encoding * * @param data Array of characters * @param zeroBuffer Zero the temporary buffer * @return Byte array */ @NotNull public static char[] toChars(@NotNull byte[] data, boolean zeroBuffer) { ByteBuffer byteBuffer = ByteBuffer.wrap(data); CharBuffer charBuffer = Charset.forName("UTF-8").decode(byteBuffer); char[] chars = Arrays.copyOfRange(charBuffer.array(), charBuffer.position(), charBuffer.limit()); if (zeroBuffer) { zero(charBuffer); } return chars; }