package cn.hmac;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import javax.crypto.KeyGenerator;
import javax.crypto.Mac;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import org.apache.commons.codec.binary.Hex;
import org.bouncycastle.crypto.digests.MD5Digest;
import org.bouncycastle.crypto.macs.HMac;
import org.bouncycastle.crypto.params.KeyParameter;
/**
* 使用HMAC方式实现消息摘要加密
* @author Aaryn 2017年10月24日
*
*/
public class TestHMAC {
private static String src = "testHMAC firefox";
public static void main(String[] args) {
testHMAC();
bcHMAC();
}
public static void testHMAC() {
try {
// 1.初始化KeyGenerator
KeyGenerator kg = KeyGenerator.getInstance("HmacMD5");
// 2. 产生密钥
SecretKey generateKey = kg.generateKey();
// 3. 获得密钥
byte[] encoded = generateKey.getEncoded();
// 4.还原密钥
SecretKey restoSecretKey = new SecretKeySpec(encoded, "HmacMD5");
// 5.实例化MAC
Mac mac = Mac.getInstance(restoSecretKey.getAlgorithm());
// 6.初始化 MAC
mac.init(restoSecretKey);
// 7.执行摘要
byte[] doFinal = mac.doFinal(src.getBytes());
System.out.println("jdk HmacMD5-->" + Hex.encodeHexString(doFinal));
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (InvalidKeyException e) {
e.printStackTrace();
}
}
public static void bcHMAC() {
HMac hmac = new HMac(new MD5Digest());
hmac.init(new KeyParameter(org.bouncycastle.util.encoders.Hex.decode("aaaaaaaaaa")));
hmac.update(src.getBytes(), 0, src.getBytes().length);
byte[] doFinal = new byte[hmac.getMacSize()];
hmac.doFinal(doFinal, 0);
System.out.println("bc hmacMD5-->" + Hex.encodeHexString(doFinal));
}
}
---------------------------------------package cn.hmac;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import javax.crypto.KeyGenerator;
import javax.crypto.Mac;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import org.apache.commons.codec.binary.Hex;
import org.bouncycastle.crypto.digests.MD5Digest;
import org.bouncycastle.crypto.macs.HMac;
import org.bouncycastle.crypto.params.KeyParameter;
/**
* 使用HMAC方式实现消息摘要加密
* @author Aaryn 2017年10月24日
*
*/
public class TestHMAC {
private static String src = "testHMAC firefox";
public static void main(String[] args) {
testHMAC();
bcHMAC();
}
public static void testHMAC() {
try {
// 1.初始化KeyGenerator
KeyGenerator kg = KeyGenerator.getInstance("HmacMD5");
// 2. 产生密钥
SecretKey generateKey = kg.generateKey();
// 3. 获得密钥
byte[] encoded = generateKey.getEncoded();
// 4.还原密钥
SecretKey restoSecretKey = new SecretKeySpec(encoded, "HmacMD5");
// 5.实例化MAC
Mac mac = Mac.getInstance(restoSecretKey.getAlgorithm());
// 6.初始化 MAC
mac.init(restoSecretKey);
// 7.执行摘要
byte[] doFinal = mac.doFinal(src.getBytes());
System.out.println("jdk HmacMD5-->" + Hex.encodeHexString(doFinal));
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (InvalidKeyException e) {
e.printStackTrace();
}
}
public static void bcHMAC() {
HMac hmac = new HMac(new MD5Digest());
hmac.init(new KeyParameter(org.bouncycastle.util.encoders.Hex.decode("aaaaaaaaaa")));
hmac.update(src.getBytes(), 0, src.getBytes().length);
byte[] doFinal = new byte[hmac.getMacSize()];
hmac.doFinal(doFinal, 0);
System.out.println("bc hmacMD5-->" + Hex.encodeHexString(doFinal));
}
}
-----------------------------------------------我是分隔符----------------------------------------------------------
package cn.sha;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.security.Security;
import org.apache.commons.codec.binary.Hex;
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;
/**
* SHA实现消息摘要算法加密
* @author Aaryn 2017年10月24日
*
*/
public class TestSHA {
private static String srcc = "imooc sha";
public static void main(String[] args) {
jdkSHA1();
bcSHA1();
bcSHA224();
ccSHA1();
}
/**
* JDK方式实现
*/
public static void jdkSHA1() {
try {
MessageDigest md = MessageDigest.getInstance("SHA");
md.update(srcc.getBytes());
System.out.println("jdk SHA1-->" + Hex.encodeHexString(md.digest()));
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
}
/**
* 使用BC方式实现SHA1加密
*/
public static void bcSHA1() {
Digest dg = new SHA1Digest();
//三个参数:1.要进行加密的byte[]数组;2.起始位置;3.加密长度
dg.update(srcc.getBytes(), 0, srcc.getBytes().length);
//声明加密后存储数据的数组,数组长度为加密数组的长度
byte[] bcByte = new byte[dg.getDigestSize()];
//加密后进行存放
dg.doFinal(bcByte, 0);
System.out.println("bc SHA1-->" + Hex.encodeHexString(bcByte));
}
/**
* 使用BC方式实现SHA224的摘要算法
*/
public static void bcSHA224() {
Digest dg = new SHA224Digest();
dg.update(srcc.getBytes(), 0, srcc.getBytes().length);
byte[] bcByte = new byte[dg.getDigestSize()];
//加密后进行存放
dg.doFinal(bcByte, 0);
System.out.println("bc SHA224-->" + Hex.encodeHexString(bcByte));
}
public static void ccSHA1(){
System.out.println("cc SHA1-->" + Hex.encodeHexString(DigestUtils.sha1(srcc.getBytes())));
System.out.println("cc SHA1ofString-->" + DigestUtils.sha1Hex(srcc));
}
}
___________________________________________________________________________________________________________________________________
package cn.test;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import org.apache.commons.codec.binary.Hex;
import org.apache.commons.codec.digest.DigestUtils;
import org.bouncycastle.crypto.Digest;
import org.bouncycastle.crypto.digests.MD4Digest;
import org.bouncycastle.crypto.digests.MD5Digest;
/**
* MD5方式实现消息摘要加密
* @author Aaryn 2017年10月24日
*
*/
public class test {
private static String src = "imooc MD5";
public static void main(String[] args) {
jdkMD5();
jdkMD2();
BCMD4();
BCMD5();
ccMD5();
ccMD2();
}
/**
* jdk实现MD5
*/
private static void jdkMD5(){
try {
// 1.得到一个MD5的加密对象
MessageDigest md = MessageDigest.getInstance("MD5");
// 2.使用digest对src对象进行处理
byte[] digest = md.digest(src.getBytes());
// 3.将字节数组转换为表示顺序中每个字节的十六进制值的字符串
System.out.println("jdkMD5-->" + Hex.encodeHexString(digest));
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
}
/**
* jdk实现MD2
*/
private static void jdkMD2(){
try {
// 1.得到一个MD2的加密对象
MessageDigest md = MessageDigest.getInstance("MD2");
// 2.使用digest对src对象进行处理
byte[] digest = md.digest(src.getBytes());
// 3.将字节数组转换为表示顺序中每个字节的十六进制值的字符串
System.out.println("jdkMD2-->" + Hex.encodeHexString(digest));
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
}
/**
* bc实现MD4
*/
public static void BCMD4() {
//得到一个MD4的加密对象
Digest digest = new MD4Digest();
//参数1:要进行加密的数组;参数2:起始位置;参数3:加密长度
digest.update(src.getBytes(), 0, src.getBytes().length);
byte[] MD4Byte = new byte[digest.getDigestSize()];
digest.doFinal(MD4Byte, 0);
System.out.println("BC MD4-->" + Hex.encodeHexString(MD4Byte));
}
/**
* bc实现MD5
*/
public static void BCMD5() {
//得到一个MD5的加密对象
Digest digest = new MD5Digest();
//参数1:要进行加密的数组;参数2:起始位置;参数3:加密长度
digest.update(src.getBytes(), 0, src.getBytes().length);
byte[] MD5Byte = new byte[digest.getDigestSize()];
digest.doFinal(MD5Byte, 0);
System.out.println("BC MD5-->" + Hex.encodeHexString(MD5Byte));
}
/**
* CC实现MD5
*/
public static void ccMD5() {
System.out.println("CC MD5-->" + DigestUtils.md5Hex(src.getBytes()));
}
/**
* CC实现MD2
*/
public static void ccMD2() {
System.out.println("CC MD2-->" + DigestUtils.md2Hex(src.getBytes()));
}
}