code: private byte[] digestWithSalt(InputStream data, int bufferLength) throws IOException {
  		if (this.saltPosition <= 0) {
  			// 加盐在开头
  			this.digest.update(this.salt);
  		}
  
  		final byte[] buffer = new byte[bufferLength];
  		int total = 0;
  		int read;
  		while ((read = data.read(buffer, 0, bufferLength)) > -1) {
  			total += read;
  			if (this.saltPosition > 0 && total >= this.saltPosition) {
  				if (total != this.saltPosition) {
  					digest.update(buffer, 0, total - this.saltPosition);
  				}
  				// 加盐在中间
  				this.digest.update(this.salt);
  				this.digest.update(buffer, total - this.saltPosition, read);
  			} else {
  				this.digest.update(buffer, 0, read);
  			}
  		}
  
  		if (total < this.saltPosition) {
  			// 加盐在末尾
  			this.digest.update(this.salt);
  		}
  
  		return this.digest.digest();
  	}
docs: 生成摘要
  
  @param data {@link InputStream} 数据流
  @param bufferLength 缓存长度，不足1使用 {@link IoUtil#DEFAULT_BUFFER_SIZE} 做为默认值
  @return 摘要bytes
  @throws IOException 从流中读取数据引发的IO异常