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

Java加密、解密函数:10个实用示例

发布时间:2023-06-24 15:00:01

Java加密和解密函数是常用的方法之一,用于保护数据的安全性。Java提供了各种加密和解密方法,可以根据需要选择适合的方法进行使用。以下是10个实用示例。

1. MD5加密方法

MD5是常用的加密算法之一,可以用于对密码、文件等进行加密。Java提供了MD5加密方法:

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

public class MD5Encryption {
    public static String md5(String input) {
        try {
            MessageDigest md = MessageDigest.getInstance("MD5");
        byte[] messageDigest = md.digest(input.getBytes());
        BigInteger num = new BigInteger(1, messageDigest);
        String hash = num.toString(16);
        while (hash.length() < 32) {
            hash = "0" + hash;
        }
        return hash;
        }
        catch (NoSuchAlgorithmException e) {
            throw new RuntimeException(e);
        }
    }
}

2. Base64编码和解码方法

Base64是一种将二进制数据编码成可打印字符的方法,可以用于传输和存储数据。Java提供了Base64编码和解码方法:

import java.util.Base64;

public class Base64Encryption {
    public static String encode(String input) {
        byte[] encodedBytes = Base64.getEncoder().encode(input.getBytes());
        return new String(encodedBytes);
    }

    public static String decode(String input) {
        byte[] decodedBytes = Base64.getDecoder().decode(input.getBytes());
        return new String(decodedBytes);
    }
}

3. DES加密和解密方法

DES是一种对称加密算法,可以用于加密和解密数据。Java提供了DES加密和解密方法:

import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import java.nio.charset.StandardCharsets;
import java.security.NoSuchAlgorithmException;
import java.util.Base64;

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

    public static String encrypt(String input, String key) throws Exception {
        KeyGenerator keyGen = KeyGenerator.getInstance(ALGORITHM);
        keyGen.init(56);
        SecretKey secretKey = keyGen.generateKey();

        Cipher cipher = Cipher.getInstance(ALGORITHM);
        cipher.init(Cipher.ENCRYPT_MODE, secretKey);

        byte[] encryptedBytes = cipher.doFinal(input.getBytes(StandardCharsets.UTF_8));
        return Base64.getEncoder().encodeToString(encryptedBytes);
    }

    public static String decrypt(String input, String key) throws Exception {
        byte[] decodedBytes = Base64.getDecoder().decode(input.getBytes(StandardCharsets.UTF_8));

        KeyGenerator keyGen = KeyGenerator.getInstance(ALGORITHM);
        keyGen.init(56);
        SecretKey secretKey = keyGen.generateKey();

        Cipher cipher = Cipher.getInstance(ALGORITHM);
        cipher.init(Cipher.DECRYPT_MODE, secretKey);

        byte[] decryptedBytes = cipher.doFinal(decodedBytes);
        return new String(decryptedBytes);
    }
}

4. AES加密和解密方法

AES是一种对称加密算法,可以用于加密和解密数据。Java提供了AES加密和解密方法:

import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import java.nio.charset.StandardCharsets;
import java.security.NoSuchAlgorithmException;
import java.util.Base64;

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

    public static String encrypt(String input, String key) throws Exception {
        KeyGenerator keyGen = KeyGenerator.getInstance(ALGORITHM);
        keyGen.init(128);
        SecretKey secretKey = keyGen.generateKey();

        Cipher cipher = Cipher.getInstance(ALGORITHM);
        cipher.init(Cipher.ENCRYPT_MODE, secretKey);

        byte[] encryptedBytes = cipher.doFinal(input.getBytes(StandardCharsets.UTF_8));
        return Base64.getEncoder().encodeToString(encryptedBytes);
    }

    public static String decrypt(String input, String key) throws Exception {
        byte[] decodedBytes = Base64.getDecoder().decode(input.getBytes(StandardCharsets.UTF_8));

        KeyGenerator keyGen = KeyGenerator.getInstance(ALGORITHM);
        keyGen.init(128);
        SecretKey secretKey = keyGen.generateKey();

        Cipher cipher = Cipher.getInstance(ALGORITHM);
        cipher.init(Cipher.DECRYPT_MODE, secretKey);

        byte[] decryptedBytes = cipher.doFinal(decodedBytes);
        return new String(decryptedBytes);
    }
}

5. RSA加密和解密方法

RSA是一种非对称加密算法,可以用于加密和解密数据。Java提供了RSA加密和解密方法:

import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.Signature;
import java.util.Base64;

public class RSAEncryption {

    public static String encrypt(String input) throws Exception {
        KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA");
        keyGen.initialize(2048);
        KeyPair keyPair = keyGen.generateKeyPair();
        PublicKey publicKey = keyPair.getPublic();

        Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
        cipher.init(Cipher.ENCRYPT_MODE, publicKey);

        byte[] encryptedBytes = cipher.doFinal(input.getBytes());
        return Base64.getEncoder().encodeToString(encryptedBytes);
    }

    public static String decrypt(String input) throws Exception {
        KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA");
        keyGen.initialize(2048);
        KeyPair keyPair = keyGen.generateKeyPair();
        PrivateKey privateKey = keyPair.getPrivate();

        Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
        cipher.init(Cipher.DECRYPT_MODE, privateKey);

        byte[] decryptedBytes = cipher.doFinal(Base64.getDecoder().decode(input));
        return new String(decryptedBytes);
    }

    public static String sign(String input, PrivateKey privateKey) throws Exception {
        Signature signature = Signature.getInstance("SHA256withRSA");
        signature.initSign(privateKey);
        signature.update(input.getBytes());
        byte[] signatureBytes = signature.sign();
        return Base64.getEncoder().encodeToString(signatureBytes);
    }

    public static boolean verify(String input, String signature, PublicKey publicKey) throws Exception {
        Signature s = Signature.getInstance("SHA256withRSA");
        s.initVerify(publicKey);
        s.update(input.getBytes());
        return s.verify(Base64.getDecoder().decode(signature));
    }
}

6. HMAC-SHA256加密方法

HMAC-SHA256是一种基于哈希函数的加密算法,可以用于生成消息验证码等。Java提供了HMAC-SHA256加密方法:

import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.StandardCharsets;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.util.Base64;

public class HmacSha256Encryption {
    private static final String ALGORITHM = "HmacSHA256";

    public static String hmac(String input, String key) throws NoSuchAlgorithmException, InvalidKeyException {
        SecretKeySpec keySpec = new SecretKeySpec(key.getBytes(StandardCharsets.UTF_8), ALGORITHM);
        Mac mac = Mac.getInstance(ALGORITHM);
        mac.init(keySpec);
        byte[] hashBytes = mac.doFinal(input.getBytes(StandardCharsets.UTF_8));
        return Base64.getEncoder().encodeToString(hashBytes);
    }
}

7. Bouncy Castle加密和解密方法

Bouncy Castle是一个开源的加密库,可以用于Java加密和解密操作。Java提供了Bouncy Castle加密和解密方法:

`java

import org.bouncycastle.jce.provider.BouncyCastleProvider;

import javax.crypto.Cipher;

import javax.crypto.SecretKey;

import javax.crypto.spec.IvParameterSpec;

import javax.crypto.spec.PBEKeySpec;

import javax.crypto.spec.SecretKeySpec;

import java.math.BigInteger;

import java.nio.charset.StandardCharsets;

import java.security.AlgorithmParameters;

import java.security.Security;

import java.security.spec.KeySpec;

import java.util.Base64;

public class BouncyCastleEncryption {

static {

Security.addProvider(new BouncyCastleProvider());

}

public static String encrypt(String input, String password, String salt) throws Exception {

byte[] saltBytes = salt.getBytes(StandardCharsets.UTF_8);

byte[] inputBytes = input.getBytes(StandardCharsets.UTF_8);

byte[] passwordBytes = password.getBytes(StandardCharsets.UTF_8);

SecretKey secretKey = getSecretKey(saltBytes, passwordBytes);

byte[] initializationVector = getInitializationVector();

Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");

cipher.init(Cipher.ENCRYPT_MODE, secretKey, new IvParameterSpec(initializationVector));

byte[] encryptedBytes = cipher.doFinal(inputBytes);

byte[] combinedBytes = new byte[initializationVector.length + encryptedBytes.length];

System.arraycopy(initializationVector, 0, combinedBytes, 0, initializationVector.length);

System.arraycopy(encryptedBytes, 0, combinedBytes, initializationVector.length, encryptedBytes.length);

return Base64.getEncoder().encodeToString(combinedBytes);