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

使用Java函数实现对一个字符串进行加密解密操作

发布时间:2023-06-27 05:40:55

对于字符串的加密和解密操作,在Java中可以通过一些常用的方法和算法来实现,例如对称加密算法,非对称加密算法,哈希算法等。下面将详细介绍如何实现字符串的加密和解密。

一、对称加密算法实现字符串加密和解密

对称加密算法是指加密和解密使用同一种密钥的算法,常见的对称加密算法有DES、3DES、AES等。

在Java中,可以使用Java Cryptography Architecture (JCA)来实现对称加密算法。示例如下:

1、首先,需要选择一个对称加密算法,例如AES算法。

2、然后,需要生成密钥并对密钥进行加密操作。

3、对明文进行加密操作,并将加密结果返回。

4、对密文进行解密操作,并将解密结果返回。

示例代码如下:

import javax.crypto.Cipher;

import javax.crypto.KeyGenerator;

import javax.crypto.SecretKey;

import javax.crypto.spec.SecretKeySpec;

import java.util.Base64;

/**

 * 对称加密算法

 */

public class SymmetricEncryption {

    /**

     * 生成密钥

     * @param algorithm 加密算法

     * @return 密钥

     * @throws Exception

     */

    private static byte[] generateKey(String algorithm) throws Exception {

        KeyGenerator keyGenerator = KeyGenerator.getInstance(algorithm);

        SecretKey secretKey = keyGenerator.generateKey();

        return secretKey.getEncoded();

    }

    /**

     * 对密钥进行加密

     * @param key 密钥

     * @param algorithm 加密算法

     * @return 加密后的密钥

     * @throws Exception

     */

    private static byte[] encryptKey(byte[] key, String algorithm) throws Exception {

        SecretKeySpec keySpec = new SecretKeySpec(key, algorithm);

        Cipher cipher = Cipher.getInstance(algorithm + "/ECB/PKCS5Padding");

        cipher.init(Cipher.ENCRYPT_MODE, keySpec);

        return cipher.doFinal(key);

    }

    /**

     * 对密钥进行解密

     * @param encryptedKey 加密后的密钥

     * @param algorithm 加密算法

     * @return 解密后的密钥

     * @throws Exception

     */

    private static byte[] decryptKey(byte[] encryptedKey, String algorithm) throws Exception {

        SecretKeySpec keySpec = new SecretKeySpec(encryptedKey, algorithm);

        Cipher cipher = Cipher.getInstance(algorithm + "/ECB/PKCS5Padding");

        cipher.init(Cipher.DECRYPT_MODE, keySpec);

        return cipher.doFinal(encryptedKey);

    }

    /**

     * 对字符串进行加密

     * @param data 明文

     * @param key 密钥

     * @param algorithm 加密算法

     * @return 密文

     * @throws Exception

     */

    public static String encrypt(String data, byte[] key, String algorithm) throws Exception {

        SecretKeySpec keySpec = new SecretKeySpec(key, algorithm);

        Cipher cipher = Cipher.getInstance(algorithm + "/ECB/PKCS5Padding");

        cipher.init(Cipher.ENCRYPT_MODE, keySpec);

        byte[] encryptedData = cipher.doFinal(data.getBytes());

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

    }

    /**

     * 对字符串进行解密

     * @param data 密文

     * @param key 密钥

     * @param algorithm 加密算法

     * @return 明文

     * @throws Exception

     */

    public static String decrypt(String data, byte[] key, String algorithm) throws Exception {

        byte[] encryptedData = Base64.getDecoder().decode(data.getBytes());

        SecretKeySpec keySpec = new SecretKeySpec(key, algorithm);

        Cipher cipher = Cipher.getInstance(algorithm + "/ECB/PKCS5Padding");

        cipher.init(Cipher.DECRYPT_MODE, keySpec);

        byte[] decryptedData = cipher.doFinal(encryptedData);

        return new String(decryptedData);

    }

    public static void main(String[] args) throws Exception {

        String data = "Hello, world!";

        byte[] key = generateKey("AES");

        byte[] encryptedKey = encryptKey(key, "AES");

        String encryptedData = encrypt(data, key, "AES");

        String decryptedData = decrypt(encryptedData, key, "AES");

        byte[] decryptedKey = decryptKey(encryptedKey, "AES");

        System.out.println("data: " + data);

        System.out.println("key: " + Base64.getEncoder().encodeToString(key));

        System.out.println("encrypted key: " + Base64.getEncoder().encodeToString(encryptedKey));

        System.out.println("encrypted data: " + encryptedData);

        System.out.println("decrypted data: " + decryptedData);

        System.out.println("decrypted key: " + Base64.getEncoder().encodeToString(decryptedKey));

    }

}

二、非对称加密算法实现字符串加密和解密

非对称加密算法是指使用一对密钥(公钥和私钥)进行加解密操作的算法。常见的非对称加密算法有RSA、DSA等。

在Java中,可以使用Java Cryptography Architecture (JCA)来实现非对称加密算法。示例如下:

1、首先,需要生成公钥和私钥。

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 AsymmetricEncryption {

    /**

     * 生成公钥和私钥

     * @param algorithm 加密算法

     * @return 公钥和私钥

     * @throws Exception

     */

    private static KeyPair generateKey(String algorithm) throws Exception {

        KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance(algorithm);

        keyPairGenerator.initialize(2048);

        return keyPairGenerator.genKeyPair();

    }

    /**

     * 对字符串进行加密

     * @param data 明文

     * @param publicKey 公钥

     * @param algorithm 加密算法

     * @return 密文

     * @throws Exception

     */

    public static String encrypt(String data, PublicKey publicKey, String algorithm) throws Exception {

        Cipher cipher = Cipher.getInstance(algorithm);

        cipher.init(Cipher.ENCRYPT_MODE, publicKey);

        byte[] encryptedData = cipher.doFinal(data.getBytes());

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

    }

    /**

     * 对字符串进行解密

     * @param data 密文

     * @param privateKey 私钥

     * @param algorithm 加密算法

     * @return 明文

     * @throws Exception

     */

    public static String decrypt(String data, PrivateKey privateKey, String algorithm) throws Exception {

        byte[] encryptedData = Base64.getDecoder().decode(data.getBytes());

        Cipher cipher = Cipher.getInstance(algorithm);

        cipher.init(Cipher.DECRYPT_MODE, privateKey);

        byte[] decryptedData = cipher.doFinal(encryptedData);

        return new String(decryptedData);

    }

    public static void main(String[] args) throws Exception {

        String data = "Hello, world!";

        KeyPair keyPair = generateKey("RSA");

        PublicKey publicKey = keyPair.getPublic();

        PrivateKey privateKey = keyPair.getPrivate();

        String encryptedData = encrypt(data, publicKey, "RSA");

        String decryptedData = decrypt(encryptedData, privateKey, "RSA");

        System.out.println("data: " + data);

        System.out.println("public key: " + Base64.getEncoder().encodeToString(publicKey.getEncoded()));

        System.out.println("private key: " + Base64.getEncoder().encodeToString(privateKey.getEncoded()));

        System.out.println("encrypted data: " + encryptedData);

        System.out.println("decrypted data: " + decryptedData);

    }

}

三、哈希算法实现字符串加密

哈希算法是指将任意长度的消息压缩到一个固定长度的摘要中的算法。常见的哈希算法有MD5、SHA-1、SHA-256等。

在Java中,可以使用Java Message Service (JMS)中的MessageDigest类来实现哈希算法。示例如下:

1、首先,需要选择一个哈希算法,例如MD5算法。

2、对明文进行哈希操作,并将哈希结果返回。

示例代码如下:

import java.security.MessageDigest;

import java.util.Base64;

/**

 * 哈希算法

 */

public class Hash {

    /**

     * 对字符串进行哈希

     * @