欢迎访问宙启技术站
智能推送

Java中的加密函数-数据加密与解密的函数集合

发布时间:2023-06-23 21:17:28

Java中的加密函数是一组数据加密和解密的函数集合,在Java开发中应用广泛。本文将为您介绍Java中加密函数的基本原理、加密方式以及应用实例。

一、加密函数的基本原理

加密函数主要是通过各种算法,将明文转化成密文,从而使得通信双方都可以保证数据的安全性。Java中常见的加密方式包括对称加密和非对称加密,其中对称加密采用相同的密钥进行加密和解密,而非对称加密则使用不同的密钥进行加密和解密。

二、对称加密的实现

1. DES加密

DES加密是一种对称密钥加密算法,其主要实现方式为:

public static byte[] encryptDES(byte[] srcData, byte[] keyValue) {  
    try {  
        // 生成密钥  
        SecretKey key = new SecretKeySpec(keyValue, ALGORITHM);  
          
        // 加密  
        Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);  
        cipher.init(Cipher.ENCRYPT_MODE, key);  
        byte[] result = cipher.doFinal(srcData);  
        return result;  
    } catch (Exception e) {  
        e.printStackTrace();  
        return null;  
    }  
}  

2. AES加密

AES加密是一种高级加密标准,其主要实现方式为:

public static byte[] encryptAES(byte[] srcData, byte[] keyValue) {  
    try {  
        // 生成密钥  
        SecretKey key = new SecretKeySpec(keyValue, ALGORITHM);  
          
        // 加密  
        Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);  
        cipher.init(Cipher.ENCRYPT_MODE, key);  
        byte[] result = cipher.doFinal(srcData);  
        return result;  
    } catch (Exception e) {  
        e.printStackTrace();  
        return null;  
    }  
}  

三、非对称加密的实现

1. RSA加密

RSA加密是一种非对称加密算法,其主要实现方式为:

public static byte[] encryptRSA(byte[] srcData, PublicKey publicKey) {  
    try {  
        Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);  
        cipher.init(Cipher.ENCRYPT_MODE, publicKey);  
        byte[] result = cipher.doFinal(srcData);  
        return result;  
    } catch (Exception e) {  
        e.printStackTrace();  
        return null;  
    }  
}  

2. DSA加密

DSA加密是一种数字签名算法,其主要实现方式为:

public static byte[] encryptDSA(byte[] srcData, PrivateKey privateKey) {  
    try {  
        Signature signature = Signature.getInstance(CIPHER_ALGORITHM);  
        signature.initSign(privateKey);  
        signature.update(srcData);  
        byte[] result = signature.sign();  
        return result;  
    } catch (Exception e) {  
        e.printStackTrace();  
        return null;  
    }  
}  

四、应用实例

Java中的加密函数在实际应用中也有着广泛的用途。例如在数字签名、用户名密码加密传输等场景中,都需要采用Java的加密函数进行实现。

public class EncryptUtil {
    public static final String ENCODE = "UTF-8";
    public static final String ALGORITHM_RSA = "RSA";
    public static final String ALGORITHM_DSA = "DSA";
    public static final String ALGORITHM_DES = "DES";
    public static final String ALGORITHM_AES = "AES";
    public static final String SIGNATURE_ALGORITHM = "MD5withRSA";
    public static final String TRANSFORMATION_RSA = "RSA/ECB/PKCS1Padding";
    public static final String TRANSFORMATION_AES = "AES/ECB/PKCS5Padding";
    public static final String TRANSFORMATION_DES = "DES/ECB/PKCS5Padding";

    //RSA加密
    public static String encryptRSA(String srcData, PublicKey publicKey) {
        byte[] resultBytes = encryptRSA(srcData.getBytes(), publicKey);
        return Base64.getEncoder().encodeToString(resultBytes);
    }

    //RSA解密
    public static String decryptRSA(String srcData, PrivateKey privateKey) {
        try {
            byte[] resultBytes = Base64.getDecoder().decode(srcData);
            byte[] data = decryptRSA(resultBytes, privateKey);
            return new String(data, ENCODE);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    //DSA加密
    public static String encryptDSA(String srcData, PrivateKey privateKey) {
        byte[] resultBytes = encryptDSA(srcData.getBytes(), privateKey);
        return Base64.getEncoder().encodeToString(resultBytes);
    }

    //DSA解密
    public static String decryptDSA(String srcData, PublicKey publicKey) {
        try {
            byte[] resultBytes = Base64.getDecoder().decode(srcData);
            byte[] data = decryptDSA(resultBytes, publicKey);
            return new String(data, ENCODE);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    //MD5数字签名
    public static String signMD5(String srcData, PrivateKey privateKey) {
        byte[] signData = signMD5(srcData.getBytes(), privateKey);
        return Base64.getEncoder().encodeToString(signData);
    }

    //MD5数字验签
    public static boolean verifyMD5(String srcData, PublicKey publicKey, String signData) {
        byte[] srcBytes = srcData.getBytes();
        byte[] signBytes = Base64.getDecoder().decode(signData);
        return verifyMD5(srcBytes, publicKey, signBytes);
    }

    //DES加密
    public static String encryptDES(String srcData, String key) {
        byte[] resultBytes = encryptDES(srcData.getBytes(), key.getBytes());
        return Base64.getEncoder().encodeToString(resultBytes);
    }

    //DES解密
    public static String decryptDES(String srcData, String key) {
        try {
            byte[] resultBytes = Base64.getDecoder().decode(srcData);
            byte[] data = decryptDES(resultBytes, key.getBytes());
            return new String(data, ENCODE);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    //AES加密
    public static String encryptAES(String srcData, String key) {
        byte[] resultBytes = encryptAES(srcData.getBytes(), key.getBytes());
        return Base64.getEncoder().encodeToString(resultBytes);
    }

    //AES解密
    public static String decryptAES(String srcData, String key) {
        try {
            byte[] resultBytes = Base64.getDecoder().decode(srcData);
            byte[] data = decryptAES(resultBytes, key.getBytes());
            return new String(data, ENCODE);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
}

通过以上代码示例,我们可以看出Java中的加密函数十分灵活可靠,可以为我们的安全通信提供有力保障。