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

Java中常用的加密函数及其解密方法

发布时间:2023-06-10 09:36:22

Java作为一种常见的编程语言,经常需要处理加密和解密的操作。加密算法可以保护敏感数据或信息的隐私性和完整性,而解密算法则是把加密后的数据还原成原始的明文数据。下面列出Java中常用的加密函数及其解密方法。

1. MD5加密

MD5是一种常见的加密算法,通过对数据进行摘要处理,生成一个128位的散列值。Java内置了MessageDigest类,可以使用该类中的getInstance方法来获取MD5实例。常用的加密方法如下:

public static String encrypt(String data) {
    String result = "";
    try {
        MessageDigest md = MessageDigest.getInstance("MD5");
        byte[] bytes = md.digest(data.getBytes());
        StringBuffer sb = new StringBuffer();
        for (byte b : bytes) {
            int i = b & 0xff;
            if (i < 0xf) {
                sb.append(0);
            }
            sb.append(Integer.toHexString(i));
        }
        result = sb.toString();
    } catch (NoSuchAlgorithmException e) {
        e.printStackTrace();
    }
    return result;
}

对于MD5加密的数据,由于它是不可逆的,因此没有通用的解密方法。

2. AES加密

AES是一种对称加密算法,它可以对数据进行加密和解密,使用同一个密钥进行加密和解密操作。Java内置了Cipher类可以用于AES加密和解密操作。常用的加密和解密方法如下:

public static String encrypt(String data, String key) {
    String result = "";
    try {
        Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
        SecretKeySpec secretKeySpec = new SecretKeySpec(key.getBytes(), "AES");
        IvParameterSpec ivParameterSpec = new IvParameterSpec(key.getBytes());
        cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec, ivParameterSpec);
        byte[] bytes = cipher.doFinal(data.getBytes());
        result = Base64.getEncoder().encodeToString(bytes);
    } catch (NoSuchPaddingException | NoSuchAlgorithmException | InvalidAlgorithmParameterException | InvalidKeyException | BadPaddingException | IllegalBlockSizeException e) {
        e.printStackTrace();
    }
    return result;
}

public static String decrypt(String data, String key) {
    String result = "";
    try {
        Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
        SecretKeySpec secretKeySpec = new SecretKeySpec(key.getBytes(), "AES");
        IvParameterSpec ivParameterSpec = new IvParameterSpec(key.getBytes());
        cipher.init(Cipher.DECRYPT_MODE, secretKeySpec, ivParameterSpec);
        byte[] bytes = Base64.getDecoder().decode(data);
        result = new String(cipher.doFinal(bytes));
    } catch (NoSuchPaddingException | NoSuchAlgorithmException | InvalidAlgorithmParameterException | InvalidKeyException | BadPaddingException | IllegalBlockSizeException e) {
        e.printStackTrace();
    }
    return result;
}

3. RSA加密

RSA是一种公钥加密算法,可以实现公私钥的加密和解密操作。Java内置了KeyPairGenerator和Cipher类可以用于RSA加密和解密操作。常用的加密和解密方法如下:

public static Map<String, Object> generateKeyPair() {
    Map<String, Object> keyMap = new HashMap<String, Object>();
    try {
        KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
        keyPairGenerator.initialize(1024);
        KeyPair keyPair = keyPairGenerator.generateKeyPair();
        PrivateKey privateKey = keyPair.getPrivate();
        PublicKey publicKey = keyPair.getPublic();
        keyMap.put("privateKey", privateKey);
        keyMap.put("publicKey", publicKey);
    } catch (NoSuchAlgorithmException e) {
        e.printStackTrace();
    }
    return keyMap;
}

public static byte[] encrypt(byte[] data, PublicKey publicKey) {
    byte[] result = null;
    try {
        Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
        cipher.init(Cipher.ENCRYPT_MODE, publicKey);
        result = cipher.doFinal(data);
    } catch (NoSuchAlgorithmException | NoSuchPaddingException | InvalidKeyException | BadPaddingException | IllegalBlockSizeException e) {
        e.printStackTrace();
    }
    return result;
}

public static byte[] decrypt(byte[] data, PrivateKey privateKey) {
    byte[] result = null;
    try {
        Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
        cipher.init(Cipher.DECRYPT_MODE, privateKey);
        result = cipher.doFinal(data);
    } catch (NoSuchAlgorithmException | NoSuchPaddingException | InvalidKeyException | BadPaddingException | IllegalBlockSizeException e) {
        e.printStackTrace();
    }
    return result;
}

以上是Java中常用的加密函数及其解密方法,对于不同的加密算法,我们可以根据需求选择合适的加密函数。对于需要保证数据隐私性和完整性的场景,我们可以使用以上算法进行加密处理。