Java对称加密:手把手教你加密

2023-09-01 16:52:24 浏览数 (2)

首先,让我们来谈谈对称加密。对称加密是指使用相同的密钥进行加密和解密的过程。简单来说,就像是一个锁,需要一把相同的钥匙才能打开它。由于这种方式很容易实现,所以在很多场合都被广泛应用。

接下来,我们将用Java来实现对称加密。我们选择AES算法,这是一种广泛应用的对称加密算法。首先,我们需要使用javax.crypto包中的密钥类来生成密钥。如下所示:

代码语言:javascript复制
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;

public class SymmetricEncryption {

    public static void main(String[] args) throws Exception {
        KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
        keyGenerator.init(128);

        SecretKey secretKey = keyGenerator.generateKey();
        byte[] keyBytes = secretKey.getEncoded();
        SecretKeySpec keySpec = new SecretKeySpec(keyBytes, "AES");
    }
}

接下来,我们需要使用javax.crypto包中的加密器类来进行加密,如下所示:

代码语言:javascript复制
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;

public class SymmetricEncryption {

    public static void main(String[] args) throws Exception {
        KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
        keyGenerator.init(128);

        SecretKey secretKey = keyGenerator.generateKey();
        byte[] keyBytes = secretKey.getEncoded();
        SecretKeySpec keySpec = new SecretKeySpec(keyBytes, "AES");

        Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
        cipher.init(Cipher.ENCRYPT_MODE, keySpec);

        byte[] input = "Hello, world!".getBytes("UTF-8");
        byte[] encrypted = cipher.doFinal(input);

        System.out.println(new String(encrypted, "UTF-8"));
    }
}

在这个例子中,我们使用了AES算法,并且使用了ECB模式和PKCS5Padding填充方式。ECB是一种简单的模式,它将明文分成固定大小的数据块,并将每个数据块分别加密。PKCS5Padding是一种填充方式,它在明文末尾填充适当的字节,使明文长度为块长度的整数倍。

最后,我们需要使用相同的密钥和解密器类来进行解密,如下所示:

代码语言:javascript复制
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;

public class SymmetricEncryption {

    public static void main(String[] args) throws Exception {
        KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
        keyGenerator.init(128);

        SecretKey secretKey = keyGenerator.generateKey();
        byte[] keyBytes = secretKey.getEncoded();
        SecretKeySpec keySpec = new SecretKeySpec(keyBytes, "AES");

        Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
        cipher.init(Cipher.ENCRYPT_MODE, keySpec);

        byte[] input = "Hello, world!".getBytes("UTF-8");
        byte[] encrypted = cipher.doFinal(input);

        cipher.init(Cipher.DECRYPT_MODE, keySpec);
        byte[] decrypted = cipher.doFinal(encrypted);

        System.out.println(new String(decrypted, "UTF-8"));
    }
}

在这个例子中,我们首先使用相同的密钥生成器来生成相同的密钥。然后,我们使用相同的加密器类和密钥对明文进行加密,并将加密后的密文作为输入传递给解密器类。因为我们使用相同的密钥,所以解密器类可以正确地解密密文,并且输出明文。

好啦,这就是Java对称加密的简单实现。希望这篇文章能够帮助你理解Java对称加密的操作过程。我们为什么要使用加密呢?因为我们常常需要将敏感信息进行保护,避免信息泄露。那么,下次有需要的时候,就有手把手的示例代码参考啦!

0 人点赞