update方法有多个变体,其实意义相差无几:
public final byte[] update(byte[] input) public final byte[] update(byte[] input, int inputOffset, int inputLen) public final int update(byte[] input, int inputOffset, int inputLen, byte[] output) throws ShortBufferException public final int update(ByteBuffer input, ByteBuffer output) throws ShortBufferExceptionupdate方法主要用于部分加密或者部分解密,至于加密或是解密取决于Cipher初始化时候的opmode。即使它有多个变体,但是套路是一样的:依赖于一个输入的缓冲区(带有需要被加密或者被解密的数据)、返回值或者参数是一个输出的缓冲区,一些额外的参数可以通过偏移量和长度控制加密或者解密操作的数据段。部分加密或者解密操作完毕后,必须要调用Cipher#doFinal()方法来结束加密或者解密操作。
doFinal方法doFinal方法也存在多个变体:
/** * 结束多部分加密或者解密操作。 * 此方法需要在update调用链执行完毕之后调用,返回的结果是加密或者解密结果的一部分。 * 此方法正常调用结束之后Cipher会重置为初始化状态。 */ public final byte[] doFinal() throws IllegalBlockSizeException, BadPaddingException /** * 结束多部分加密或者解密操作。 * 此方法需要在update调用链执行完毕之后调用,传入的output作为缓冲区接收加密或者解密结果的一部分。 * 此方法正常调用结束之后Cipher会重置为初始化状态。 */ public final int doFinal(byte[] output, int outputOffset) throws IllegalBlockSizeException, ShortBufferException, BadPaddingException /** * 结束单部分加密或者解密操作。 * 此方法接收需要加密或者解密的完整报文,返回处理结果 * 此方法正常调用结束之后Cipher会重置为初始化状态。 */ public final byte[] doFinal(byte[] input) throws IllegalBlockSizeException, BadPaddingException /** * 结束单部分或者多部分加密或者解密操作。 * 参数inputOffset为需要加解密的报文byte数组的起始位置,inputLen为需要加密或者解密的字节长度 * 此方法正常调用结束之后Cipher会重置为初始化状态。 */ public final byte[] doFinal(byte[] input, int inputOffset, int inputLen) throws IllegalBlockSizeException, BadPaddingException /** * 结束单部分或者多部分加密或者解密操作。 * 参数inputOffset为需要加解密的报文byte数组的起始位置,inputLen为需要加密或者解密的字节长度,output用于接收加解密的结果 * 此方法正常调用结束之后Cipher会重置为初始化状态。 */ public final int doFinal(byte[] input, int inputOffset, int inputLen, byte[] output) throws ShortBufferException, IllegalBlockSizeException, BadPaddingException /** * 结束单部分或者多部分加密或者解密操作。 * 参数inputOffset为需要加解密的报文byte数组的起始位置,inputLen为需要加密或者解密的字节长度, * output用于接收加解密的结果,outputOffset用于设置output的起始位置 * 此方法正常调用结束之后Cipher会重置为初始化状态。 */ public final int doFinal(byte[] input, int inputOffset, int inputLen, byte[] output, int outputOffset) throws ShortBufferException, IllegalBlockSizeException, BadPaddingException /** * 结束单部分或者多部分加密或者解密操作。 * 参数input为输入缓冲区,output为输出缓冲区 * 此方法正常调用结束之后Cipher会重置为初始化状态。 */ public final int doFinal(ByteBuffer input, ByteBuffer output) throws ShortBufferException, IllegalBlockSizeException, BadPaddingException