package org.nutz.lang.encrypt; import java.io.FilterOutputStream; import java.io.IOException; import java.io.OutputStream; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import org.nutz.lang.Lang; public class MsgDigestOutputStream extends FilterOutputStream { private MessageDigest md; public MsgDigestOutputStream(OutputStream out, MessageDigest md) { super(out); this.md = md; } public MsgDigestOutputStream(OutputStream out, String name) { super(out); try { this.md = MessageDigest.getInstance(name); } catch (NoSuchAlgorithmException e) { throw Lang.wrapThrow(e); } } public void write(byte[] b) throws IOException { this.out.write(b); md.update(b); } public void write(byte[] b, int off, int len) throws IOException { this.out.write(b, off, len); md.update(b, off, len); } public void write(int b) throws IOException { this.out.write(b); md.update((byte)b); } /** * 获取摘要, 同时MessageDigest也被重置了 */ public String digest() { return Lang.fixedHexString(md.digest()); } public boolean markSupported() { return false; } }