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

Java函数:如何实现加密解密。

发布时间:2023-07-04 21:35:32

Java中实现加密解密的方式有很多种,下面我将介绍几种常见的做法。

1.对称加密算法:

对称加密算法使用相同的密钥进行加密和解密。Java提供了多种对称加密算法,如DES、AES、Blowfish等。以下是使用AES算法进行加密解密的示例代码:

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

public class SymmetricEncryptionDemo {

    public static void main(String[] args) throws Exception {
        // 生成AES密钥
        SecretKey secretKey = generateAESKey();
        String originalText = "Hello, World!";

        // 加密
        byte[] encryptedText = encrypt(originalText, secretKey);
        System.out.println("Encrypted Text: " + new String(encryptedText));

        // 解密
        String decryptedText = decrypt(encryptedText, secretKey);
        System.out.println("Decrypted Text: " + decryptedText);
    }

    public static SecretKey generateAESKey() throws Exception {
        KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
        keyGenerator.init(128);
        return keyGenerator.generateKey();
    }

    public static byte[] encrypt(String plainText, SecretKey secretKey) throws Exception {
        Cipher cipher = Cipher.getInstance("AES");
        cipher.init(Cipher.ENCRYPT_MODE, secretKey);
        return cipher.doFinal(plainText.getBytes());
    }

    public static String decrypt(byte[] encryptedText, SecretKey secretKey) throws Exception {
        Cipher cipher = Cipher.getInstance("AES");
        cipher.init(Cipher.DECRYPT_MODE, secretKey);
        byte[] decryptedTextBytes = cipher.doFinal(encryptedText);
        return new String(decryptedTextBytes);
    }
}

2.非对称加密算法:

非对称加密算法使用一对密钥,公钥用于加密,私钥用于解密。Java提供了RSA算法作为非对称加密算法的实现。以下是使用RSA算法进行加密解密的示例代码:

import javax.crypto.Cipher;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.util.Base64;

public class AsymmetricEncryptionDemo {

    public static void main(String[] args) throws Exception {
        // 生成RSA密钥对
        KeyPair keyPair = generateRSAKeyPair();
        String originalText = "Hello, World!";

        // 加密
        byte[] encryptedText = encrypt(originalText, keyPair.getPublic());
        System.out.println("Encrypted Text: " + new String(encryptedText));

        // 解密
        String decryptedText = decrypt(encryptedText, keyPair.getPrivate());
        System.out.println("Decrypted Text: " + decryptedText);
    }

    public static KeyPair generateRSAKeyPair() throws Exception {
        KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
        keyPairGenerator.initialize(2048);
        return keyPairGenerator.generateKeyPair();
    }

    public static byte[] encrypt(String plainText, PublicKey publicKey) throws Exception {
        Cipher cipher = Cipher.getInstance("RSA");
        cipher.init(Cipher.ENCRYPT_MODE, publicKey);
        return cipher.doFinal(plainText.getBytes());
    }

    public static String decrypt(byte[] encryptedText, PrivateKey privateKey) throws Exception {
        Cipher cipher = Cipher.getInstance("RSA");
        cipher.init(Cipher.DECRYPT_MODE, privateKey);
        byte[] decryptedTextBytes = cipher.doFinal(encryptedText);
        return new String(decryptedTextBytes);
    }
}

3.哈希算法:

哈希算法是一种单向的加密算法,它将任意长度的数据转换为固定长度的哈希值,常用的哈希算法有MD5和SHA系列。Java提供了MessageDigest类用于实现哈希算法。以下是使用MD5算法进行加密的示例代码:

import java.security.MessageDigest;
import java.util.Base64;

public class HashAlgorithmDemo {

    public static void main(String[] args) throws Exception {
        String originalText = "Hello, World!";

        // MD5加密
        String md5EncodedText = encryptWithMD5(originalText);
        System.out.println("MD5 Encoded Text: " + md5EncodedText);

        // SHA-256加密
        String sha256EncodedText = encryptWithSHA256(originalText);
        System.out.println("SHA-256 Encoded Text: " + sha256EncodedText);
    }

    public static String encryptWithMD5(String plainText) throws Exception {
        MessageDigest md5 = MessageDigest.getInstance("MD5");
        byte[] encodedTextBytes = md5.digest(plainText.getBytes());
        return Base64.getEncoder().encodeToString(encodedTextBytes);
    }

    public static String encryptWithSHA256(String plainText) throws Exception {
        MessageDigest sha256 = MessageDigest.getInstance("SHA-256");
        byte[] encodedTextBytes = sha256.digest(plainText.getBytes());
        return Base64.getEncoder().encodeToString(encodedTextBytes);
    }
}

通过以上的示例代码,你可以实现Java中的加密解密功能。具体选择哪种加密算法要根据实际需求和安全性要求来决定。