美文网首页
java 各加密算法示例(上)

java 各加密算法示例(上)

作者: wyc0859 | 来源:发表于2021-05-02 13:40 被阅读0次

BASE64、MD、SHA都常用3种算法

1、jdk(不推荐)
2、commonsCodec (其实就是用JDK,但简化了操作)【推荐】
3、Bouncy Castle (对JDK的补充,丰富了一些功能)

Base64的3种算法

import java.io.IOException;
import org.apache.tomcat.util.codec.binary.Base64;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
import org.junit.jupiter.api.Test;

public class optest {
    private static String src = "ruhuashop.com";  
    @Test
    public void index() {
        System.out.println("开始");
        jdkBase64();
        System.out.println("-------------------------------");
        commonsCodesBase64();
        System.out.println("-------------------------------");
        bouncyCastleBase64();
    }

    public void jdkBase64() {
        try {
            BASE64Encoder encoder = new BASE64Encoder();
            String encode = encoder.encode(src.getBytes());
            System.out.println("encode : " + encode);
            BASE64Decoder decoder = new BASE64Decoder();
            System.out.println("decode : " + new String(decoder.decodeBuffer(encode)));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    public void commonsCodesBase64() {
        byte[] encodeBytes = Base64.encodeBase64(src.getBytes());
        System.out.println("encode : " + new String(encodeBytes));
        byte[] decodeBytes = Base64.decodeBase64(encodeBytes);
        System.out.println("decode : " + new String(decodeBytes));
    } 
    public void bouncyCastleBase64() {
        byte[] encodeBytes = org.bouncycastle.util.encoders.Base64.encode(src.getBytes());
        System.out.println("encode : " + new String(encodeBytes));
        byte[] decodeBytes = org.bouncycastle.util.encoders.Base64.decode(encodeBytes);
        System.out.println("decode : " + new String(decodeBytes));
    }
}

bouncyCastle需maven引入:

 <dependency>
            <groupId>org.bouncycastle</groupId>
            <artifactId>bcprov-jdk15on</artifactId>
            <version>1.49</version> 
        </dependency>

MD算法; MD2、MD4、MD5

import org.apache.commons.codec.digest.DigestUtils;
import org.bouncycastle.crypto.Digest;
import org.bouncycastle.crypto.digests.MD4Digest;
import org.bouncycastle.crypto.digests.MD5Digest;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import org.junit.jupiter.api.Test;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.security.Security;

import org.apache.commons.codec.binary.Hex;

public class optest2 {
    private static String src = "ruhuashop.com"; 
    @Test
    public void index() {
        System.out.println("开始");
        jdkMD5();
        System.out.println("-------------------------------");
        jdkMD2();
        System.out.println("-------------------------------");
        bcMD5();
        System.out.println("-------------------------------");
        bcMD4();
        System.out.println("-------------------------------");
        ccMD5();
        System.out.println("-------------------------------");
        ccMD2();
    }

    public void jdkMD5() {
        try {
            MessageDigest md = MessageDigest.getInstance("MD5");
            byte[] md5Bytes = md.digest(src.getBytes());
            System.out.println("JDK MD5 : " + Hex.encodeHexString(md5Bytes));
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
    }
    public static void jdkMD2() {
        try {
            MessageDigest md = MessageDigest.getInstance("MD2");
            byte[] md2Bytes = md.digest(src.getBytes());
            System.out.println("JDK MD2 : " + Hex.encodeHexString(md2Bytes));
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
    }

    public void bcMD5() {
        Digest digest = new MD5Digest();
        digest.update(src.getBytes(), 0, src.getBytes().length);
        byte[] md5Bytes = new byte[digest.getDigestSize()];
        digest.doFinal(md5Bytes, 0);
        System.out.println("BC MD5 : " + org.bouncycastle.util.encoders.Hex.toHexString(md5Bytes));
    }
    // 复制上面的bc md5方法改为md4也是可以运行的;另一种bc md4方法
    public void bcMD4() {
        try {
            Security.addProvider(new BouncyCastleProvider());
            MessageDigest md = MessageDigest.getInstance("MD4");
            byte[] md5Bytes = md.digest(src.getBytes());
            System.out.println("BC MD4 : " + Hex.encodeHexString(md5Bytes));
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
    }

    //import org.apache.commons.codec.digest.DigestUtils;
    public void ccMD5() {
        System.out.println("CC MD5 : " + DigestUtils.md5Hex(src.getBytes()));
    }
    public void ccMD2() {
        System.out.println("CC MD2 : " + DigestUtils.md2Hex(src.getBytes()));
    }
}

commons.codec需maven引入:

<dependency>
            <groupId>org.apache.directory.studio</groupId>
            <artifactId>org.apache.commons.codec</artifactId>
            <version>1.8</version>
</dependency>

SHA的3种算法

package com.example.sha;

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.junit.jupiter.api.Test;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException; 

public class optest3 {
    private static String src = "ruhuashop.com";


    @Test
    public void index() {
        System.out.println("开始");
        jdkSHA1();
        System.out.println("-------------------------------");
        bcSHA1();
        System.out.println("-------------------------------");
        bcSHA224();
        System.out.println("-------------------------------");
        ccSHA1();
    }

    public void jdkSHA1() {
        try {
            MessageDigest md = MessageDigest.getInstance("SHA");
            md.update(src.getBytes());
            System.out.println("jdk sha-1 : " + Hex.encodeHexString(md.digest()));
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
    }

    public void bcSHA1() {
        Digest digest = new SHA1Digest();
        digest.update(src.getBytes(), 0, src.getBytes().length);
        byte[] sha1Bytes = new byte[digest.getDigestSize()];
        digest.doFinal(sha1Bytes, 0);
        System.out.println("bc sha-1 : " + org.bouncycastle.util.encoders.Hex.toHexString(sha1Bytes));
    }

    public static void bcSHA224() {
        Digest digest = new SHA224Digest();
        digest.update(src.getBytes(), 0, src.getBytes().length);
        byte[] sha224Bytes = new byte[digest.getDigestSize()];
        digest.doFinal(sha224Bytes, 0);
        System.out.println("bc sha-224 : " + org.bouncycastle.util.encoders.Hex.toHexString(sha224Bytes));
    }

    public static void ccSHA1() {
        System.out.println("cc sha1 - 1 :" + DigestUtils.sha1Hex(src.getBytes()));
        System.out.println("cc sha1 - 2 :" + DigestUtils.sha1Hex(src));
        System.out.println("cc sha256 :" + DigestUtils.sha256Hex(src));
    }
}

HMAC 含有密钥的散列函数算法; 融合MD、SHA

只能由JDK或BC实现

    @Test
    public void index() {
        jdkHmacMD5();
        bcHmacMD5();
    }

    public static void jdkHmacMD5() {
        try {
            KeyGenerator keyGenerator = KeyGenerator.getInstance("HmacMD5");
            //初始化KeyGenerator
            SecretKey secretKey = keyGenerator.generateKey();//产生密钥
            // byte[] key = secretKey.getEncoded();//获得随机密钥
            byte[] key = Hex.decodeHex(new char[]{'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a'});//固定密钥
            SecretKey restoreSecretKey = new SecretKeySpec(key, "HmacMD5");   //还原密钥
            Mac mac = Mac.getInstance(restoreSecretKey.getAlgorithm());   //实例化MAC
            mac.init(restoreSecretKey);    // 初始化Mac
            byte[] hmacMD5Bytes = mac.doFinal(src.getBytes());//执行摘要
            System.out.println("jdk hmacMD5 : " + Hex.encodeHexString(hmacMD5Bytes));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void bcHmacMD5() {
        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[] hmacMD5Bytes = new byte[hmac.getMacSize()];//执行摘要
        hmac.doFinal(hmacMD5Bytes, 0);
        System.out.println("bc hmacMD5 : " + org.bouncycastle.util.encoders.Hex.toHexString(hmacMD5Bytes));
    }

其他加密算法:

不常用的,如RipeMD、Tiger、Whirlpool、GOST3411 只能用Bouncy Castle实现

相关文章

  • java 各加密算法示例(上)

    BASE64、MD、SHA都常用3种算法 1、jdk(不推荐)2、commonsCodec (其实就是用JDK,但...

  • java 各加密算法示例(下)

    对称加密算法(JDK和BC实现方式) DES (是数据加密标准,很多年前常用,已被破解不具备安全性)3DES(三重...

  • encyption&decyption

    0, 常用加密算法的Java实现(一) ——单向加密算法MD5和SHA 常用加密算法的Java实现总结(二) ...

  • java实现文件复制、剪切、删除、过滤书目录

    java实现文件复制示例 java实现剪切文件示例 java实现删除文件示例 java实现过滤文件示例

  • iOS中的对称加密算法

    1、简介对称加密算法又称传统加密算法。加密和解密使用同一个 密钥。 1.1对称加密算法示例密钥:X加密算法:每个字...

  • iOS 对称加密算法

    简介 对称加密算法又称传统加密算法。加密和解密使用同一个密钥。 对称加密算法示例 密钥:X加密算法:每个字符+X明...

  • JAVA基础教程书目录

    使用Java示例计算圆形区域 使用Java示例计算圆周 使用Java示例计算矩形区域 使用Java示例计算矩形周长...

  • Java实现常用的三种加密算法详解

    Java实现常用的三种加密算法详解 信息摘要算法、对称加密算法以及非对称加密算法。本文将利用Java实现这几种常见...

  • java 加密解密方式

    1、MD5(Message Digest Algorithm)加密算法 是一种单向加密算法,只能加密不能解密,示例...

  • Java中的加密算法(二)

    1.对称加密算法1.1对称加密算法-DES 在Java中的加密算法(一)中主要讲解了密码中常用的术语,Java安全...

网友评论

      本文标题:java 各加密算法示例(上)

      本文链接:https://www.haomeiwen.com/subject/utptdltx.html