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

实现加密和解密的Java函数

发布时间:2023-06-15 18:46:04

加密和解密是现代信息安全的基础,Java作为主要的编程语言之一,也在加密和解密领域得到广泛的应用。本文将介绍在Java中如何实现加密和解密的函数。

1. 加密

Java支持多种加密算法,其中最常用的是对称加密算法和非对称加密算法。

对称加密算法是指加密和解密使用相同的密钥,包括DES、3DES、AES等算法。下面是一个使用AES算法加密的例子:

import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import java.util.Base64;

public class AESUtil {

    // 生成128位随机密钥
    public static SecretKey generateKey() throws Exception {
        KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
        keyGenerator.init(128);
        return keyGenerator.generateKey();
    }

    // 使用AES算法加密数据
    public static String encrypt(String data, SecretKey key) throws Exception {
        Cipher cipher = Cipher.getInstance("AES");
        cipher.init(Cipher.ENCRYPT_MODE, key);
        byte[] encrypted = cipher.doFinal(data.getBytes("UTF-8"));
        return Base64.getEncoder().encodeToString(encrypted);
    }
}

上面的代码中,generateKey()函数用于生成128位随机密钥,encrypt()函数使用AES算法加密数据,其中“UTF-8”表示将字符串转换为字节数组时使用的字符编码。

非对称加密算法是指加密和解密使用不同的密钥,包括RSA、DSA等算法。下面是一个使用RSA算法进行加密的例子:

import javax.crypto.Cipher;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.SecureRandom;
import java.util.Base64;

public class RSAUtil {

    // 生成公钥和私钥对
    public static KeyPair generateKeyPair() throws Exception {
        KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
        keyPairGenerator.initialize(1024, new SecureRandom());
        return keyPairGenerator.generateKeyPair();
    }

    // 使用RSA算法加密数据
    public static String encrypt(String data, PublicKey publicKey) throws Exception {
        Cipher cipher = Cipher.getInstance("RSA");
        cipher.init(Cipher.ENCRYPT_MODE, publicKey);
        byte[] encrypted = cipher.doFinal(data.getBytes("UTF-8"));
        return Base64.getEncoder().encodeToString(encrypted);
    }
}

上面的代码中,generateKeyPair()函数用于生成公钥和私钥对,encrypt()函数使用RSA算法加密数据,其中PublicKey表示公钥。

2. 解密

解密通常是将加密后的数据还原为原始的明文数据,也需要使用相应的密钥或公钥进行解密。下面是解密的相关代码。

对称加密算法的解密方式与加密方式类似,只需要将加密模式改为解密模式即可,如下:

// 使用AES算法解密数据
public static String decrypt(String encrypted, SecretKey key) throws Exception {
    Cipher cipher = Cipher.getInstance("AES");
    cipher.init(Cipher.DECRYPT_MODE, key);
    byte[] decrypted = cipher.doFinal(Base64.getDecoder().decode(encrypted));
    return new String(decrypted, "UTF-8");
}

上面的代码中,decrypt()函数使用AES算法解密数据,其中“DNCRYPT_MODE”表示使用解密模式,SecretKey表示加密时使用的密钥。

非对称加密算法的解密方式与加密方式略有不同,需要使用相应的私钥进行解密,例如:

// 使用RSA算法解密数据
public static String decrypt(String encrypted, PrivateKey privateKey) throws Exception {
    Cipher cipher = Cipher.getInstance("RSA");
    cipher.init(Cipher.DECRYPT_MODE, privateKey);
    byte[] decrypted = cipher.doFinal(Base64.getDecoder().decode(encrypted));
    return new String(decrypted, "UTF-8");
}

上面的代码中,decrypt()函数使用RSA算法解密数据,其中“DECRYPT_MODE”表示使用解密模式,PrivateKey表示加密时使用的私钥。

3. 总结

本文介绍了Java中加密和解密的基本操作,包括对称加密算法和非对称加密算法的实现方式。对于安全敏感的应用程序,加密和解密是必不可少的功能,Java提供了丰富的API,方便开发人员使用。