几种常见加密算法的Java实现

base64方式

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

import java.nio.charset.StandardCharsets;

public class bybase64 {

    private static String str = "guomz";
    public static void main(String[] args) {
        byte[] encodeBytes = Base64.encodeBase64(str.getBytes(StandardCharsets.UTF_8));
        System.out.println(new String(encodeBytes));
        byte[] decodeBytes = Base64.decodeBase64(encodeBytes);
        System.out.println(new String(decodeBytes));
    }
}

base64方式比较简单,由于密码本是公开的所以安全性比较低,用该方式传输数据可以防止乱码、避免明文直接传输。

AES加解密

import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.StandardCharsets;
import java.security.Key;

public class byaes {

    //需要加密的信息
    private static String str = "guomz";
    /**
     * aes对称加密
     * @param args
     */
    public static void main(String[] args) {

        aesByRandomKey();
        System.out.println("--------------------------");
        aesByUsingKey("1234567812345678");
    }

    /**
     * 使用随机生成的key加密
     */
    private static void aesByRandomKey(){
        try {
            //生成密钥
            KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
            //初始化密钥长度
            keyGenerator.init(128);
            SecretKey secretKey = keyGenerator.generateKey();
            //生成后base64加密
            byte[] encodedKey = secretKey.getEncoded();
            System.out.println("key: " + new String(encodedKey));

            //key转换,上面的key可以直接指定一个随机字符串,然后base64加密传入下面方法
            Key key = new SecretKeySpec(encodedKey, "AES");

            //进行加密,指定模式
            Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
            cipher.init(Cipher.ENCRYPT_MODE, key);
            byte[] encryptBytes = cipher.doFinal(str.getBytes(StandardCharsets.UTF_8));
            System.out.println(new String(encryptBytes));

            //进行解密
            cipher.init(Cipher.DECRYPT_MODE, key);
            byte[] decryptBytes = cipher.doFinal(encryptBytes);
            System.out.println(new String(decryptBytes));
        }catch (Exception e){
            e.printStackTrace();
        }
    }

    /**
     * 使用自定义的key加密
     * @param keyStr
     */
    private static void aesByUsingKey(String keyStr){
        try {
            //key转换,上面的key可以直接指定一个随机字符串,然后base64加密传入下面方法
            Key key = new SecretKeySpec(keyStr.getBytes(StandardCharsets.UTF_8), "AES");

            //进行加密,指定模式
            Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
            cipher.init(Cipher.ENCRYPT_MODE, key);
            byte[] encryptBytes = cipher.doFinal(str.getBytes(StandardCharsets.UTF_8));
            System.out.println(new String(encryptBytes));

            //进行解密
            cipher.init(Cipher.DECRYPT_MODE, key);
            byte[] decryptBytes = cipher.doFinal(encryptBytes);
            System.out.println(new String(decryptBytes));
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}

AES属于对称加密,是DES加密的升级版,目前广泛使用,原理是加解密的密钥用的是一个,需要把密钥提供给解密方。

你可能感兴趣的:(java)