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

Java中如何实现字符串加密函数?

发布时间:2023-10-13 08:54:22

字符串加密函数可以使用Java中的加密算法进行实现。Java中提供了多种加密算法,如MD5、SHA-1、SHA-256等。

一、使用MD5进行字符串加密:

MD5是一种常用的哈希算法,可以将字符串转换为长度固定且不可逆的密文。

示例代码如下:

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

public class MD5Encryption {
    public static String encrypt(String str) {
        try {
            MessageDigest md = MessageDigest.getInstance("MD5");
            md.update(str.getBytes());
            byte[] result = md.digest();
            StringBuilder sb = new StringBuilder();
            for (byte b : result) {
                int val = (int) b & 0xff;
                if (val < 16) {
                    sb.append("0");
                }
                sb.append(Integer.toHexString(val));
            }
            return sb.toString();
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
            return null;
        }
    }

    public static void main(String[] args) {
        String str = "hello world";
        String encryptedStr = encrypt(str);
        System.out.println("Encrypted string: " + encryptedStr);
    }
}

上述代码中,首先获取MD5加密算法的实例,然后通过update方法将字符串转换为字节数组,并使用digest方法计算密文。最后,使用StringBuilder拼接密文,并将其转换为十六进制表示的字符串。

二、使用AES进行字符串加密:

AES是一种对称加密算法,可以将字符串通过密钥加密,然后再通过相同的密钥解密。

示例代码如下:

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

public class AESEncryption {
    public static String encrypt(String str, String key) {
        try {
            // 生成密钥
            KeyGenerator keyGen = KeyGenerator.getInstance("AES");
            SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG");
            secureRandom.setSeed(key.getBytes());
            keyGen.init(128, secureRandom);
            SecretKey secretKey = keyGen.generateKey();
            byte[] encodedKey = secretKey.getEncoded();
            SecretKeySpec secretKeySpec = new SecretKeySpec(encodedKey, "AES");

            // 加密
            Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
            cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec);
            byte[] encryptedBytes = cipher.doFinal(str.getBytes(StandardCharsets.UTF_8));
            return Base64.getEncoder().encodeToString(encryptedBytes);
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

    public static String decrypt(String str, String key) {
        try {
            // 生成密钥
            KeyGenerator keyGen = KeyGenerator.getInstance("AES");
            SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG");
            secureRandom.setSeed(key.getBytes());
            keyGen.init(128, secureRandom);
            SecretKey secretKey = keyGen.generateKey();
            byte[] encodedKey = secretKey.getEncoded();
            SecretKeySpec secretKeySpec = new SecretKeySpec(encodedKey, "AES");

            // 解密
            Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
            cipher.init(Cipher.DECRYPT_MODE, secretKeySpec);
            byte[] bytes = Base64.getDecoder().decode(str);
            byte[] decryptedBytes = cipher.doFinal(bytes);
            return new String(decryptedBytes, StandardCharsets.UTF_8);
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

    public static void main(String[] args) {
        String str = "hello world";
        String key = "secret_key";
        String encryptedStr = encrypt(str, key);
        String decryptedStr = decrypt(encryptedStr, key);
        System.out.println("Encrypted string: " + encryptedStr);
        System.out.println("Decrypted string: " + decryptedStr);
    }
}

上述代码中,首先使用密钥生成器生成密钥,然后通过密钥初始化加密算法的实例。使用doFinal方法进行加密或解密操作。最后,使用Base64进行编码或解码,将结果转换为字符串。