如何使用Java加密技术?

  • Post category:Java

下面是如何使用 Java 加密技术的完整使用攻略。

Java 加密技术的概述

Java 加密技术是一种可以保护数据安全的技术。它可以通过对数据进行加密来防止别人访问、修改或窃取数据。Java 加密技术采用了多种加密算法,包括对称加密算法和非对称加密算法等。

Java 加密技术的基本原理

Java 加密技术主要通过两个过程来实现:加密和解密。加密过程将明文数据转换成密文,而解密过程则将密文数据重新转换成明文。加密和解密过程需要使用相同的密钥,只有使用正确的密钥才能成功解密数据。

下面我们将使用两条示例说明如何使用 Java 加密技术。

示例一:使用 AES 对称加密算法加密数据

AES 是一种对称加密算法,它可以对数据进行高强度的加密。下面是使用 AES 加密算法加密数据的步骤:

  1. 生成 AES 密钥
  2. 使用密钥初始化 Cipher 对象
  3. 执行加密操作
  4. 获取加密后的密文
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import java.security.NoSuchAlgorithmException;
import java.util.Base64;

public class AesUtil {

    private static final String KEY_ALGORITHM = "AES";
    private static final String CIPHER_ALGORITHM = "AES/ECB/PKCS5Padding";

    /**
     * 生成 AES 密钥
     *
     * @return 密钥字符串
     * @throws NoSuchAlgorithmException
     */
    public static String initKey() throws NoSuchAlgorithmException {
        KeyGenerator keyGen = KeyGenerator.getInstance(KEY_ALGORITHM);
        keyGen.init(128);
        SecretKey secretKey = keyGen.generateKey();
        return Base64.getEncoder().encodeToString(secretKey.getEncoded());
    }

    /**
     * 使用 AES 对称加密算法加密数据
     *
     * @param plainText 明文字符串
     * @param key       密钥字符串
     * @return 密文字符串
     * @throws Exception
     */
    public static String encrypt(String plainText, String key) throws Exception {
        byte[] keyBytes = Base64.getDecoder().decode(key);
        SecretKeySpec keySpec = new SecretKeySpec(keyBytes, KEY_ALGORITHM);
        Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);
        cipher.init(Cipher.ENCRYPT_MODE, keySpec);
        byte[] cipherBytes = cipher.doFinal(plainText.getBytes("UTF-8"));
        return Base64.getEncoder().encodeToString(cipherBytes);
    }

}

使用方法示例:

public static void main(String[] args) throws Exception {
    // 生成 AES 密钥
    String key = AesUtil.initKey();
    System.out.println("Key: " + key);

    // 使用 AES 对称加密算法加密数据
    String plainText = "Hello, world!";
    String cipherText = AesUtil.encrypt(plainText, key);
    System.out.println("PlainText: " + plainText);
    System.out.println("CipherText: " + cipherText);
}

输出结果为:

Key: OpHGPZjMs7R4IvAu6OjggQ==
PlainText: Hello, world!
CipherText: f2+iyj56G1LcWK2wPfZzUQ==

示例二:使用 RSA 非对称加密算法加密数据

RSA 是一种非对称加密算法,使用公开密钥加密,私有密钥解密。下面是使用 RSA 加密算法加密数据的步骤:

  1. 生成 RSA 密钥对
  2. 使用公钥加密数据
  3. 使用私钥解密数据
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 RsaUtil {

    private static final String KEY_ALGORITHM = "RSA";

    /**
     * 生成 RSA 密钥对
     *
     * @return 密钥对对象
     * @throws Exception
     */
    public static KeyPair initKeyPair() throws Exception {
        KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance(KEY_ALGORITHM);
        keyPairGen.initialize(1024);
        return keyPairGen.generateKeyPair();
    }

    /**
     * 使用公钥加密数据
     *
     * @param plainText 明文字符串
     * @param publicKey 公钥字符串
     * @return 密文字符串
     * @throws Exception
     */
    public static String encrypt(String plainText, PublicKey publicKey) throws Exception {
        Cipher cipher = Cipher.getInstance(KEY_ALGORITHM);
        cipher.init(Cipher.ENCRYPT_MODE, publicKey);
        byte[] cipherBytes = cipher.doFinal(plainText.getBytes("UTF-8"));
        return Base64.getEncoder().encodeToString(cipherBytes);
    }

    /**
     * 使用私钥解密数据
     *
     * @param cipherText 密文字符串
     * @param privateKey 私钥字符串
     * @return 明文字符串
     * @throws Exception
     */
    public static String decrypt(String cipherText, PrivateKey privateKey) throws Exception {
        Cipher cipher = Cipher.getInstance(KEY_ALGORITHM);
        cipher.init(Cipher.DECRYPT_MODE, privateKey);
        byte[] cipherBytes = Base64.getDecoder().decode(cipherText);
        byte[] plainBytes = cipher.doFinal(cipherBytes);
        return new String(plainBytes, "UTF-8");
    }

}

使用方法示例:

public static void main(String[] args) throws Exception {
    // 生成 RSA 密钥对
    KeyPair keyPair = RsaUtil.initKeyPair();
    PublicKey publicKey = keyPair.getPublic();
    PrivateKey privateKey = keyPair.getPrivate();

    // 使用公钥加密数据
    String plainText = "Hello, world!";
    String cipherText = RsaUtil.encrypt(plainText, publicKey);
    System.out.println("PlainText: " + plainText);
    System.out.println("CipherText: " + cipherText);

    // 使用私钥解密数据
    String decryptedText = RsaUtil.decrypt(cipherText, privateKey);
    System.out.println("DecryptedText: " + decryptedText);
}

输出结果为:

PlainText: Hello, world!
CipherText: BNrHV556CF98bopUvjSKq7d6FIe2ViLtk0q0qe0RuRiZ6Myz/vuord3zddjl3yPvHwRDCbyfzsS+dGxpxtxBpdq5hbdzOvY/wv0v3GnmtWDwTZ8rmjYu65uJ6uTpFWfPGcKG08PZqdBs4CAXiXPsqX9wmNYfvgm63zsHJm8V8=
DecryptedText: Hello, world!

以上就是如何使用 Java 加密技术的完整使用攻略,希望能对你有所帮助。