消息摘要算法加密(代码实现)

来源:互联网 发布:新游上线软件 编辑:程序博客网 时间:2024/05/17 03:21
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.初始化KeyGeneratorKeyGenerator kg = KeyGenerator.getInstance("HmacMD5");//2.产生密钥SecretKey generateKey = kg.generateKey();//3.获得密钥byte[] encoded = generateKey.getEncoded();//4.还原密钥SecretKey restoSecretKey = new SecretKeySpec(encoded, "HmacMD5");//5.实例化MACMac mac = Mac.getInstance(restoSecretKey.getAlgorithm());//6.初始化 MACmac.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()));}}


原创粉丝点击