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

利用Java函数实现数据加密与解密的技术实现

发布时间:2023-06-26 02:35:36

数据加密和解密是信息安全领域常用的技术,它们可以有效地保护用户的隐私信息,防止敏感数据被攻击者窃取或篡改。Java语言是一种流行的编程语言,其提供了许多强大的API和库,可以用于实现数据加密与解密。本文将介绍如何利用Java函数实现数据加密与解密的技术。

一、Java加密函数

Java中加密函数主要由两部分组成,分别是加密算法和密钥管理。Java支持的加密算法有DES、3DES、AES等,密钥管理可以用Java提供的KeyStore类进行管理。

1. DES加密算法

DES是一种对称加密算法,其加密和解密都使用同一密钥。Java中的DES算法可以分为两种模式:ECB模式和CBC模式。

ECB模式:

ECB模式是一种简单的分组密码模式,其加密过程将明文分成固定大小的块,然后对每个块进行加密。

实现代码如下:

public static byte[] desEncrypt(String plainText, String key) {
        try {
            DESKeySpec desKeySpec = new DESKeySpec(key.getBytes("UTF-8"));
            SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
            SecretKey secretKey = keyFactory.generateSecret(desKeySpec);
            Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
            cipher.init(Cipher.ENCRYPT_MODE, secretKey);
            return cipher.doFinal(plainText.getBytes("UTF-8"));
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
}

CBC模式:

CBC模式是一种分组密码模式,在加密前,明文首先与上一个密文块进行异或操作,然后再进行加密。需要注意的是,CBC模式需要初始化向量IV。

实现代码如下:

public static byte[] desCBC(String plainText, String key, String iv) {
        try {
            DESKeySpec desKeySpec = new DESKeySpec(key.getBytes("UTF-8"));
            SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
            SecretKey secretKey = keyFactory.generateSecret(desKeySpec);
            Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");
            IvParameterSpec ivSpec = new IvParameterSpec(iv.getBytes("UTF-8"));
            cipher.init(Cipher.ENCRYPT_MODE, secretKey, ivSpec);
            return cipher.doFinal(plainText.getBytes("UTF-8"));
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
}

2. 3DES加密算法

3DES算法是对DES算法的改进,其可以有效地提高加密的安全性。与DES类似,3DES也可以分为ECB模式和CBC模式。

ECB模式:

实现代码如下:

public static byte[] tripleDesEncrypt(String plainText, String key) {
        try {
            DESedeKeySpec desKeySpec = new DESedeKeySpec(key.getBytes("UTF-8"));
            SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DESede");
            SecretKey secretKey = keyFactory.generateSecret(desKeySpec);
            Cipher cipher = Cipher.getInstance("DESede/ECB/PKCS5Padding");
            cipher.init(Cipher.ENCRYPT_MODE, secretKey);
            return cipher.doFinal(plainText.getBytes("UTF-8"));
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
}

CBC模式:

实现代码如下:

public static byte[] tripleDesCBC(String plainText, String key, String iv) {
        try {
            DESedeKeySpec desKeySpec = new DESedeKeySpec(key.getBytes("UTF-8"));
            SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DESede");
            SecretKey secretKey = keyFactory.generateSecret(desKeySpec);
            Cipher cipher = Cipher.getInstance("DESede/CBC/PKCS5Padding");
            IvParameterSpec ivSpec = new IvParameterSpec(iv.getBytes("UTF-8"));
            cipher.init(Cipher.ENCRYPT_MODE, secretKey, ivSpec);
            return cipher.doFinal(plainText.getBytes("UTF-8"));
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
}

3. AES加密算法

AES算法是一种高级加密标准,其加解密速度比DES和3DES更快。Java中的AES加密算法同样可以分为ECB模式和CBC模式。

ECB模式:

实现代码如下:

public static byte[] aesEncrypt(String plainText, String key) {
        try {
            SecretKeySpec secretKeySpec = new SecretKeySpec(key.getBytes("UTF-8"), "AES");
            Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
            cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec);
            return cipher.doFinal(plainText.getBytes("UTF-8"));
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
}

CBC模式:

实现代码如下:

public static byte[] aesCBC(String plainText, String key, String iv) {
        try {
            SecretKeySpec secretKeySpec = new SecretKeySpec(key.getBytes("UTF-8"), "AES");
            Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
            IvParameterSpec ivSpec = new IvParameterSpec(iv.getBytes("UTF-8"));
            cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec, ivSpec);
            return cipher.doFinal(plainText.getBytes("UTF-8"));
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
}

二、Java解密函数

Java解密函数与加密函数的实现方式类似,只是在使用Cipher的init方法时,需要指定为解密模式,另外在解密时需要注意加密时使用的IV值和密钥长度。

1. DES解密算法

ECB模式:

实现代码如下:

public static String desDecrypt(byte[] cipherText, String key) {
        try {
            DESKeySpec desKeySpec = new DESKeySpec(key.getBytes("UTF-8"));
            SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
            SecretKey secretKey = keyFactory.generateSecret(desKeySpec);
            Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
            cipher.init(Cipher.DECRYPT_MODE, secretKey);
            return new String(cipher.doFinal(cipherText), "UTF-8");
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
}

CBC模式:

实现代码如下:

public static String desCBCDecrypt(byte[] cipherText, String key, String iv) {
        try {
            DESKeySpec desKeySpec = new DESKeySpec(key.getBytes("UTF-8"));
            SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
            SecretKey secretKey = keyFactory.generateSecret(desKeySpec);
            Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");
            IvParameterSpec ivSpec = new IvParameterSpec(iv.getBytes("UTF-8"));
            cipher.init(Cipher.DECRYPT_MODE, secretKey, ivSpec);
            return new String(cipher.doFinal(cipherText), "UTF-8");
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
}

2. 3DES解密算法

ECB模式:

实现代码如下:

public static String tripleDesDecrypt(byte[] cipherText, String key) {
        try {
            DESedeKeySpec desKeySpec = new DESedeKeySpec(key.getBytes("UTF-8"));
            SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DESede");
            SecretKey secretKey = keyFactory.generateSecret(desKeySpec);
            Cipher cipher = Cipher.getInstance("DESede/ECB/PKCS5Padding");
            cipher.init(Cipher.DECRYPT_MODE, secretKey);
            return new String(cipher.doFinal(cipherText), "UTF-8");
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
}

CBC模式:

实现代码如下:

`java

public static String tripleDesCBCDecrypt(byte[] cipherText, String key, String iv) {

try {

DESedeKeySpec desKeySpec = new DESedeKeySpec(key.getBytes("UTF-8"));

SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DESede");

SecretKey secretKey = keyFactory.generateSecret(desKeySpec);

Cipher cipher = Cipher.getInstance("DESede/CBC/PKCS5Padding");

IvParameterSpec ivSpec = new IvParameterSpec(iv.getBytes("UTF-8"));

cipher.init(Cipher.DECRYPT_MODE, secretKey, ivSpec);

return new String(cipher.doFinal(cipherText), "UTF-8");

} catch (Exception e) {

throw new RuntimeException(e);

}