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

Java中常用的加密解密函数介绍

发布时间:2023-06-19 16:02:35

Java是一种常用的编程语言,因其安全性高、可移植性强、跨平台支持等特点,在网络和软件开发中广泛应用。在网络通信和数据存储过程中,数据的加密解密是非常关键的一部分。Java中提供了许多加密解密函数,本文主要介绍常用的几种加密解密函数。

1. MD5加密

MD5是一种常用的哈希加密算法,可以将任意长度的数据“压缩”成一个128位(16字节)的数字指纹。Java中提供了MessageDigest类来实现MD5加密:

public String md5(String str) {
    try {
        MessageDigest md = MessageDigest.getInstance("MD5");
        byte[] bytes = md.digest(str.getBytes("utf-8"));
        return bytesToHex(bytes);
    } catch (Exception e) {
        e.printStackTrace();
        return null;
    }
}

public static String bytesToHex(byte[] bytes) {
    StringBuffer result = new StringBuffer();
    for (byte b : bytes) {
        result.append(Integer.toString((b & 0xff) + 0x100, 16).substring(1));
    }
    return result.toString();
}

2. SHA-1加密

SHA-1是一种哈希加密算法,可以将任意长度的数据“压缩”成一个160位的数字指纹。Java中同样提供了MessageDigest类来实现SHA-1加密:

public String sha1(String str) {
    try {
        MessageDigest md = MessageDigest.getInstance("SHA-1");
        byte[] bytes = md.digest(str.getBytes("utf-8"));
        return bytesToHex(bytes);
    } catch (Exception e) {
        e.printStackTrace();
        return null;
    }
}

3. Base64编码

Base64是一种用64个字符来表示任意二进制数据的编码方式,常用于传输8位字节代码的场合。Java中提供了Base64类来实现Base64编解码:

public String base64Encode(String str) {
    try {
        byte[] bytes = str.getBytes("utf-8");
        return Base64.getEncoder().encodeToString(bytes);
    } catch (Exception e) {
        e.printStackTrace();
        return null;
    }
}

public String base64Decode(String str) {
    try {
        byte[] bytes = Base64.getDecoder().decode(str);
        return new String(bytes, "utf-8");
    } catch (Exception e) {
        e.printStackTrace();
        return null;
    }
}

4. DES加密解密

DES是一种对称加密算法,加密和解密使用相同的密钥。Java中提供了DES算法的实现类:

public String desEncrypt(String key, String str) {
    try {
        SecretKeySpec keySpec = new SecretKeySpec(key.getBytes("utf-8"), "DES");
        Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
        cipher.init(Cipher.ENCRYPT_MODE, keySpec);
        byte[] bytes = cipher.doFinal(str.getBytes("utf-8"));
        return Base64.getEncoder().encodeToString(bytes);
    } catch (Exception e) {
        e.printStackTrace();
        return null;
    }
}

public String desDecrypt(String key, String str) {
    try {
        SecretKeySpec keySpec = new SecretKeySpec(key.getBytes("utf-8"), "DES");
        Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
        cipher.init(Cipher.DECRYPT_MODE, keySpec);
        byte[] bytes = Base64.getDecoder().decode(str);
        bytes = cipher.doFinal(bytes);
        return new String(bytes, "utf-8");
    } catch (Exception e) {
        e.printStackTrace();
        return null;
    }
}

5. RSA加密解密

RSA是一种非对称加密算法,加密和解密使用不同的密钥。Java中提供了RSA算法的实现类:

public Map<String, String> generateKey() {
    try {
        KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
        keyPairGenerator.initialize(1024);
        KeyPair keyPair = keyPairGenerator.generateKeyPair();
        PublicKey publicKey = keyPair.getPublic();
        PrivateKey privateKey = keyPair.getPrivate();
        Map<String, String> keys = new HashMap<>();
        keys.put("publicKey", Base64.getEncoder().encodeToString(publicKey.getEncoded()));
        keys.put("privateKey", Base64.getEncoder().encodeToString(privateKey.getEncoded()));
        return keys;
    } catch (Exception e) {
        e.printStackTrace();
        return null;
    }
}

public String rsaEncrypt(String publicKeyStr, String str) {
    try {
        byte[] publicKeyBytes = Base64.getDecoder().decode(publicKeyStr);
        X509EncodedKeySpec keySpec = new X509EncodedKeySpec(publicKeyBytes);
        KeyFactory keyFactory = KeyFactory.getInstance("RSA");
        PublicKey publicKey = keyFactory.generatePublic(keySpec);
        Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
        cipher.init(Cipher.ENCRYPT_MODE, publicKey);
        byte[] bytes = cipher.doFinal(str.getBytes("utf-8"));
        return Base64.getEncoder().encodeToString(bytes);
    } catch (Exception e) {
        e.printStackTrace();
        return null;
    }
}

public String rsaDecrypt(String privateKeyStr, String str) {
    try {
        byte[] privateKeyBytes = Base64.getDecoder().decode(privateKeyStr);
        PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(privateKeyBytes);
        KeyFactory keyFactory = KeyFactory.getInstance("RSA");
        PrivateKey privateKey = keyFactory.generatePrivate(keySpec);
        Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
        cipher.init(Cipher.DECRYPT_MODE, privateKey);
        byte[] bytes = Base64.getDecoder().decode(str);
        bytes = cipher.doFinal(bytes);
        return new String(bytes, "utf-8");
    } catch (Exception e) {
        e.printStackTrace();
        return null;
    }
}

以上就是Java中常用的加密解密函数的介绍和示例代码,不同的加密解密算法有不同的应用场景,在具体的开发中需要根据实际情况选择合适的算法。