package com.dream.util;
import java.security.MessageDigest;
import java.security.Security;
import junit.framework.TestCase;
import org.apache.commons.codec.digest.DigestUtils;
import org.bouncycastle.crypto.Digest;
import org.bouncycastle.crypto.digests.SHA1Digest;
import org.bouncycastle.crypto.digests.SHA224Digest;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import org.bouncycastle.util.encoders.Hex;
/**
* @author zxg
* @see SHA 安全散列算法 跟md5的区别主要是明文一样,对应加密后的值密文更加散列,更安全 SHA1,MD5已经被王小云教授破解
*/
public class SHATest extends TestCase {
private final String str = "zxg is a boy";
/**
* jdk SHA1
*/
public void testjdkSHA() throws Exception {
MessageDigest md = MessageDigest.getInstance("SHA");
md.update(str.getBytes());
System.out.println(Hex.toHexString(md.digest()));
}
/**
* bc SHA1
*/
public void testbcSHA1() {
Digest digest = new SHA1Digest();
digest.update(str.getBytes(), 0, str.getBytes().length);
byte[] sha1Bytes = new byte[digest.getDigestSize()];
digest.doFinal(sha1Bytes, 0);
System.out.println(org.bouncycastle.util.encoders.Hex
.toHexString(sha1Bytes));
}
/**
* bc SHA224
*/
public void testbcSHA2() {
Digest digest = new SHA224Digest();
digest.update(str.getBytes(), 0, str.getBytes().length);
byte[] sha224Bytes = new byte[digest.getDigestSize()];
digest.doFinal(sha224Bytes, 0);
System.out.println(org.bouncycastle.util.encoders.Hex
.toHexString(sha224Bytes));
}
/**
* bc SHA224 第二种方式
*/
public void testbcSHA224_2() throws Exception {
Security.addProvider(new BouncyCastleProvider());
MessageDigest md = MessageDigest.getInstance("SHA224");
md.update(str.getBytes());
System.out.println(Hex.toHexString(md.digest()));
}
/**
* apache SHA1
*/
public void testccSHA() throws Exception {
System.out.println(DigestUtils.sha1Hex(str.getBytes()));
}
}