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

Java中常用的加密函数及实现方法

发布时间:2023-05-20 05:38:24

Java中常用的加密函数有MD5、SHA、DES、AES等。这些加密函数都是用来保护我们的敏感信息的,比如密码、身份证信息等。

MD5是一种常用的哈希函数,即将原始数据压缩成一段固定长度的数据,不可逆转。MD5就是将原始数据通过一系列复杂的计算得到一个128位的哈希值,具有高效性、安全性、不可逆性等优点。Java中实现MD5加密可以使用java.security.MessageDigest类,具体代码如下:

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class MD5Util {
    public static String getMD5(String str) {
        try {
            MessageDigest md = MessageDigest.getInstance("MD5");
            md.update(str.getBytes());
            byte[] byteDigest = md.digest();
            int i;
            StringBuffer stringBuffer = new StringBuffer("");
            for (int offset = 0; offset < byteDigest.length; offset++) {
                i = byteDigest[offset];
                if (i < 0)
                    i += 256;
                if (i < 16)
                    stringBuffer.append("0");
                stringBuffer.append(Integer.toHexString(i));
            }
            return stringBuffer.toString();
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
            return null;
        }
    }
}

SHA也是一种哈希函数,与MD5相似,它将原始数据压缩成一段固定长度的数据。SHA1是最常用的哈希函数之一,也是安全性较高的哈希函数之一。使用Java中的SHA1加密算法可以使用如下代码:

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class SHAUtil {
    public static String getSHA(String str) {
        try {
            MessageDigest md = MessageDigest.getInstance("SHA");
            md.update(str.getBytes());
            byte[] byteDigest = md.digest();
            int i;
            StringBuffer stringBuffer = new StringBuffer("");
            for (int offset = 0; offset < byteDigest.length; offset++) {
                i = byteDigest[offset];
                if (i < 0)
                    i += 256;
                if (i < 16)
                    stringBuffer.append("0");
                stringBuffer.append(Integer.toHexString(i));
            }
            return stringBuffer.toString();
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
            return null;
        }
    }
}

DES是一种对称加密算法,即使用相同的密钥加密和解密。在Java中,可以使用javax.crypto包中的DES算法实现加密。具体代码如下:

import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import java.security.SecureRandom;
import java.util.Base64;

public class DESUtil {
    private static final String ALGORITHM = "DES";

    public static String encrypt(String content, String key) {
        SecretKey secretKey = generateKey(key);
        try {
            Cipher cipher = Cipher.getInstance(ALGORITHM);
            cipher.init(Cipher.ENCRYPT_MODE, secretKey);
            byte[] result = cipher.doFinal(content.getBytes());
            return Base64.getEncoder().encodeToString(result);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    public static String decrypt(String content, String key) {
        SecretKey secretKey = generateKey(key);
        byte[] contentBytes = Base64.getDecoder().decode(content);
        try {
            Cipher cipher = Cipher.getInstance(ALGORITHM);
            cipher.init(Cipher.DECRYPT_MODE, secretKey);
            byte[] result = cipher.doFinal(contentBytes);
            return new String(result);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    private static SecretKey generateKey(String key) {
        try {
            KeyGenerator keyGenerator = KeyGenerator.getInstance(ALGORITHM);
            SecureRandom secureRandom = new SecureRandom(key.getBytes());
            keyGenerator.init(secureRandom);
            SecretKey secretKey = keyGenerator.generateKey();
            byte[] encodeFormat = secretKey.getEncoded();
            SecretKeySpec keySpec = new SecretKeySpec(encodeFormat, ALGORITHM);
            return keySpec;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
}

AES也是一种对称加密算法,与DES相比,它提供了更高的安全性和更快的速度。在Java中,可以使用javax.crypto包中的AES算法实现加密。具体代码如下:

import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import java.security.SecureRandom;
import java.util.Base64;

public class AESUtil {
    private static final String ALGORITHM = "AES";

    public static String encrypt(String content, String key) {
        SecretKey secretKey = generateKey(key);
        try {
            Cipher cipher = Cipher.getInstance(ALGORITHM);
            cipher.init(Cipher.ENCRYPT_MODE, secretKey);
            byte[] result = cipher.doFinal(content.getBytes());
            return Base64.getEncoder().encodeToString(result);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    public static String decrypt(String content, String key) {
        SecretKey secretKey = generateKey(key);
        byte[] contentBytes = Base64.getDecoder().decode(content);
        try {
            Cipher cipher = Cipher.getInstance(ALGORITHM);
            cipher.init(Cipher.DECRYPT_MODE, secretKey);
            byte[] result = cipher.doFinal(contentBytes);
            return new String(result);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    private static SecretKey generateKey(String key) {
        try {
            KeyGenerator keyGenerator = KeyGenerator.getInstance(ALGORITHM);
            SecureRandom secureRandom = new SecureRandom(key.getBytes());
            keyGenerator.init(secureRandom);
            SecretKey secretKey = keyGenerator.generateKey();
            byte[] encodeFormat = secretKey.getEncoded();
            SecretKeySpec keySpec = new SecretKeySpec(encodeFormat, ALGORITHM);
            return keySpec;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
}

以上是Java中常用的加密函数及实现方法。使用这些加密函数可以很好地保护敏感信息和数据安全。