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

使用Java函数进行数据加密和解密

发布时间:2023-05-23 05:07:29

数据加密和解密是信息安全领域中非常重要的一部分,Java是一种广泛使用的开发语言,其在加密和解密方面也提供了许多功能和库,本文将介绍如何使用Java函数进行数据加密和解密。

Java加密和解密的主要用途是保护敏感信息,防止信息被未经授权的访问和窃取。Java提供了许多加密和解密算法,如DES、AES、RSA、MD5等,下面将分别介绍这些算法的实现方式。

DES加密和解密

DES是一种对称加密算法,是最早被广泛应用的加密算法之一,也是Java中最常见的加密算法之一。DES算法需要一个固定长度的密钥,通常为64位,被编码为8个字节。DES算法的加密和解密过程都是对称的,即用相同的密钥既可以加密也可以解密。

下面是一个使用Java实现DES加密和解密的示例代码:

import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;

public class DesEncryptDecrypt {

    private static final byte[] KEY = "12345678".getBytes();

    public static byte[] encrypt(byte[] input) throws Exception {
        Cipher cipher = Cipher.getInstance("DES");
        SecretKey key = new SecretKeySpec(KEY, "DES");
        cipher.init(Cipher.ENCRYPT_MODE, key);
        return cipher.doFinal(input);
    }

    public static byte[] decrypt(byte[] input) throws Exception {
        Cipher cipher = Cipher.getInstance("DES");
        SecretKey key = new SecretKeySpec(KEY, "DES");
        cipher.init(Cipher.DECRYPT_MODE, key);
        return cipher.doFinal(input);
    }
}

这里使用Java内置的Cipher类和SecretKeySpec类进行DES加密和解密。加密和解密的具体实现就是使用Cipher类的doFinal方法进行操作。

AES加密和解密

AES是一种对称加密算法,比DES算法更加安全和复杂。AES算法的密钥长度可以是128、192或256位,根据加密强度的不同选择不同的密钥长度。与DES算法一样,AES算法的加密和解密过程都是对称的。

下面是一个使用Java实现AES加密和解密的示例代码:

import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;

public class AesEncryptDecrypt {

    private static final byte[] KEY = "1234567812345678".getBytes();

    public static byte[] encrypt(byte[] input) throws Exception {
        Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
        SecretKeySpec key = new SecretKeySpec(KEY, "AES");
        cipher.init(Cipher.ENCRYPT_MODE, key);
        return cipher.doFinal(input);
    }

    public static byte[] decrypt(byte[] input) throws Exception {
        Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
        SecretKeySpec key = new SecretKeySpec(KEY, "AES");
        cipher.init(Cipher.DECRYPT_MODE, key);
        return cipher.doFinal(input);
    }
}

同样使用Java内置的Cipher类和SecretKeySpec类进行AES加密和解密。其中,AES算法通常使用ECB模式进行加密,使用PKCS5Padding填充方式进行填充。

RSA加密和解密

RSA是一种非对称加密算法,也是最常用的非对称加密算法。RSA算法需要一对公钥和私钥,加密时使用公钥进行加密,解密时使用私钥进行解密。RSA算法的安全性通常取决于密钥长度,一般来说,RSA算法的密钥长度越长,加密强度越高,但同时也意味着加解密的速度越慢。

下面是一个使用Java实现RSA加密和解密的示例代码:

`java

import java.security.KeyFactory;

import java.security.KeyPair;

import java.security.KeyPairGenerator;

import java.security.PrivateKey;

import java.security.PublicKey;

import java.security.spec.PKCS8EncodedKeySpec;

import java.security.spec.X509EncodedKeySpec;

import javax.crypto.Cipher;

public class RsaEncryptDecrypt {

private static final String PUBLIC_KEY =

"MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDngRn9oUs+4yvRi8yow1FL4ZgX

"

+ "26DNG9CCcFb0LWnOltQO23FlIfzgtCfN0M1iP46mMYWT3RFe+m+d5ZOzd8M5VCEr

"

+ "aPa79mDud1fhpEkmYKJuYY+WfFvE59xee4+LeMq86GfNIAf6btgXjz314qejJLg0

"

+ "Q/vFEoyb+JK02mVT9QIDAQAB";

private static final String PRIVATE_KEY =

"MIICXAIBAAKBgQDngRn9oUs+4yvRi8yow1FL4ZgX26DNG9CCcFb0LWnOltQO23Fl

"

+ "IfzgtCfN0M1iP46mMYWT3RFe+m+d5ZOzd8M5VCEraPa79mDud1fhpEkmYKJuYY+W

"

+ "fFvE59xee4+LeMq86GfNIAf6btgXjz314qejJLg0Q/vFEoyb+JK02mVT9QIDAQAB

"

+ "AoGAJRbcjuXPqTITZsP+IJXowdUz7/ccINthqn8MaJOKdvGLfNOgtt4w3dsD6Z83

"

+ "rjnQL1aWeCD9g0DIcQPlOO+xVe/AtCivEAA/tVEtT2sPTtnAAbvZtp2alv60mqjY

"

+ "JPXLn6yl7zYUPqctvwdk5QmF2BL+qqfF2l5HGGymj4ucHsECQQD9Phpr8/XnHD6Z

"

+ "HjUR4BdKttBz2OwYSK3kFBhVrjZGJfkazsaPoGY1HQ4t70VzSJuvz9sJIN+HEjIO

"

+ "IaJ96IuDAkEA5WcySPH8QB33bmfwIlRYDfoXHT/1Dez6KU+1rGL4/2sLtEGVkgnf

"

+ "vW9sb9D1/xDuerVakCKZ5tq/8bs5J8GwmQJAIebSLPiL4FwupD3TnJcpg9b2yteL

"

+ "y1GuGyXRXQPt2s/Zq/YKLcbKgPESXl6l56imCG1S6ez21nxmY+qy/yKKGQJBAIAr

"

+ "Q1D9DNZdlK/66rnTtGzkrXEZfV/vNSKiOaGQM59b20Eqt5jFBEnYi+RrZnUhJ4fe

"

+ "kRfsdt0CP1hrQV9q9RkCQFZvnVDAqZtHqFUZ9SWMbbQQ9cnF3QWZQ7Z8vWkcgEb7

"

+ "t72h0G0hx11HL65GTxv6JyQnJ3xgx1ChWm2MzXAnVCc=";

public static byte[] encrypt(byte[] input) throws Exception {

Cipher cipher = Cipher.getInstance("RSA");

cipher.init(Cipher.ENCRYPT_MODE, getPublicKey());

return cipher.doFinal(input);

}

public static byte[] decrypt(byte[] input) throws Exception {

Cipher cipher = Cipher.getInstance("RSA");

cipher.init(Cipher.DECRYPT_MODE, getPrivateKey());

return cipher.doFinal(input);

}

private static PublicKey getPublicKey() throws Exception {

X509EncodedKeySpec spec = new X509EncodedKeySpec(BASE