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

Java加密函数:如何使用Java编写一个简单的密码加密和解密程序?

发布时间:2023-10-25 04:16:18

密码加密和解密程序是信息安全中的一项重要技术。在Java中,我们可以使用各种加密算法来实现密码的加密和解密。

1. 使用Java的加密API

Java提供了许多加密API,其中最常用的是javax.crypto包。这个包提供了各种加密算法,并且非常易于使用。

下面是一个简单的密码加密和解密程序示例:

import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.StandardCharsets;
import java.util.Base64;

public class EncryptionUtils {
    private static final String ALGORITHM = "AES";
    private static final String KEY = "MySecretKey12345";

    public static String encrypt(String value) {
        try {
            SecretKeySpec secretKey = new SecretKeySpec(KEY.getBytes(), ALGORITHM);
            Cipher cipher = Cipher.getInstance(ALGORITHM);
            cipher.init(Cipher.ENCRYPT_MODE, secretKey);

            byte[] encryptedBytes = cipher.doFinal(value.getBytes(StandardCharsets.UTF_8));
            return Base64.getEncoder().encodeToString(encryptedBytes);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    public static String decrypt(String encryptedValue) {
        try {
            SecretKeySpec secretKey = new SecretKeySpec(KEY.getBytes(), ALGORITHM);
            Cipher cipher = Cipher.getInstance(ALGORITHM);
            cipher.init(Cipher.DECRYPT_MODE, secretKey);

            byte[] decryptedBytes = cipher.doFinal(Base64.getDecoder().decode(encryptedValue));
            return new String(decryptedBytes);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

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

        String encryptedText = encrypt(originalText);
        System.out.println("Encrypted Text: " + encryptedText);

        String decryptedText = decrypt(encryptedText);
        System.out.println("Decrypted Text: " + decryptedText);
    }
}

上述代码实现了使用AES算法对字符串进行加密和解密。注意,这里的KEY变量是用于指定密钥,可以根据具体需求进行修改。

2. 使用开源的加密库

除了Java提供的加密API,还有一些开源的加密库可以使用。其中最著名的是Bouncy Castle库。这个库提供了许多加密算法和工具类,能够实现更复杂的加密和解密功能。

以下是使用Bouncy Castle库实现密码加密和解密的示例:

import org.bouncycastle.crypto.BufferedBlockCipher;
import org.bouncycastle.crypto.CipherParameters;
import org.bouncycastle.crypto.engines.AESEngine;
import org.bouncycastle.crypto.modes.CBCBlockCipher;
import org.bouncycastle.crypto.paddings.PKCS7Padding;
import org.bouncycastle.crypto.params.KeyParameter;
import org.bouncycastle.crypto.params.ParametersWithIV;
import org.bouncycastle.util.encoders.Base64;

import java.nio.charset.StandardCharsets;

public class EncryptionUtils {
    private static final String KEY = "MySecretKey12345";
    private static final String IV = "1234567890abcdef";

    public static String encrypt(String value) {
        try {
            byte[] keyBytes = KEY.getBytes(StandardCharsets.UTF_8);
            byte[] ivBytes = IV.getBytes(StandardCharsets.UTF_8);
            byte[] valueBytes = value.getBytes(StandardCharsets.UTF_8);

            BufferedBlockCipher cipher = new BufferedBlockCipher(new CBCBlockCipher(new AESEngine()));
            CipherParameters ivAndKey = new ParametersWithIV(new KeyParameter(keyBytes), ivBytes);
            cipher.init(true, ivAndKey);

            byte[] encryptedBytes = new byte[cipher.getOutputSize(valueBytes.length)];
            int outLength = cipher.processBytes(valueBytes, 0, valueBytes.length, encryptedBytes, 0);
            outLength += cipher.doFinal(encryptedBytes, outLength);

            return new String(Base64.encode(encryptedBytes));
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    public static String decrypt(String encryptedValue) {
        try {
            byte[] keyBytes = KEY.getBytes(StandardCharsets.UTF_8);
            byte[] ivBytes = IV.getBytes(StandardCharsets.UTF_8);
            byte[] encryptedBytes = Base64.decode(encryptedValue.getBytes(StandardCharsets.UTF_8));

            BufferedBlockCipher cipher = new BufferedBlockCipher(new CBCBlockCipher(new AESEngine()));
            CipherParameters ivAndKey = new ParametersWithIV(new KeyParameter(keyBytes), ivBytes);
            cipher.init(false, ivAndKey);

            byte[] decryptedBytes = new byte[cipher.getOutputSize(encryptedBytes.length)];
            int outLength = cipher.processBytes(encryptedBytes, 0, encryptedBytes.length, decryptedBytes, 0);
            outLength += cipher.doFinal(decryptedBytes, outLength);

            return new String(decryptedBytes);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

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

        String encryptedText = encrypt(originalText);
        System.out.println("Encrypted Text: " + encryptedText);

        String decryptedText = decrypt(encryptedText);
        System.out.println("Decrypted Text: " + decryptedText);
    }
}

上述代码使用Bouncy Castle库中的AES算法实现了密码的加密和解密。需要注意的是,这里的KEYIV变量是用于指定密钥和初始化向量,同样可以根据具体需求进行修改。

以上就是使用Java编写一个简单的密码加密和解密程序的示例。通过使用Java的加密API或开源库,我们可以轻松地实现密码的加密和解密,确保信息的安全性。