Java常用加密算法实例总结
在Java开发过程中,常常需要对数据进行加密和解密处理。为了实现这个目的,Java引入了多种加密算法,本文将对Java常用的加密算法进行总结,并给出两个示例说明。
对称加密算法
对称加密算法指的是加密和解密使用相同密钥的算法。它的特点是加密和解密速度快,但密钥容易泄露。Java支持的对称加密算法有DES、3DES和AES。
DES加密算法
DES加密算法是一种对称加密算法,它的密钥长度为56位。DES算法可以使用两种模式:ECB和CBC。ECB模式是一种常用的加密模式,但它有一个问题,即相同的明文会被加密成相同的密文,加密后的数据容易受到攻击。因此,我们通常使用CBC模式来加密数据。以下是DES加密算法的示例代码:
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;
import javax.crypto.spec.IvParameterSpec;
public class DesDemo {
public static void main(String[] args) throws Exception {
String content = "Hello, world!";
String password = "12345678";
byte[] encrypt = desEncrypt(content.getBytes(), password.getBytes());
System.out.println("加密后:" + new String(encrypt));
byte[] decrypt = desDecrypt(encrypt, password.getBytes());
System.out.println("解密后:" + new String(decrypt));
}
public static byte[] desEncrypt(byte[] content, byte[] password) throws Exception {
Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");
DESKeySpec desKeySpec = new DESKeySpec(password);
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
SecretKey secretKey = keyFactory.generateSecret(desKeySpec);
IvParameterSpec iv = new IvParameterSpec(password);
cipher.init(Cipher.ENCRYPT_MODE, secretKey, iv);
return cipher.doFinal(content);
}
public static byte[] desDecrypt(byte[] content, byte[] password) throws Exception {
Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");
DESKeySpec desKeySpec = new DESKeySpec(password);
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
SecretKey secretKey = keyFactory.generateSecret(desKeySpec);
IvParameterSpec iv = new IvParameterSpec(password);
cipher.init(Cipher.DECRYPT_MODE, secretKey, iv);
return cipher.doFinal(content);
}
}
AES加密算法
AES加密算法是一种对称加密算法,它的密钥长度可为128位、192位或256位。AES算法可以使用多种模式,包括ECB、CBC、CFB和OFB等。以下是AES加密算法的示例代码:
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
public class AesDemo {
public static void main(String[] args) throws Exception {
String content = "Hello, world!";
String password = "1234567812345678";
byte[] encrypt = aesEncrypt(content.getBytes(), password.getBytes());
System.out.println("加密后:" + new String(encrypt));
byte[] decrypt = aesDecrypt(encrypt, password.getBytes());
System.out.println("解密后:" + new String(decrypt));
}
public static byte[] aesEncrypt(byte[] content, byte[] password) throws Exception {
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
SecretKeySpec secretKeySpec = new SecretKeySpec(password, "AES");
IvParameterSpec iv = new IvParameterSpec(password);
cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec, iv);
return cipher.doFinal(content);
}
public static byte[] aesDecrypt(byte[] content, byte[] password) throws Exception {
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
SecretKeySpec secretKeySpec = new SecretKeySpec(password, "AES");
IvParameterSpec iv = new IvParameterSpec(password);
cipher.init(Cipher.DECRYPT_MODE, secretKeySpec, iv);
return cipher.doFinal(content);
}
}
非对称加密算法
非对称加密算法指的是加密和解密使用不同密钥的算法。它的特点是密钥不易泄露,但加密和解密速度较慢。Java支持的非对称加密算法有RSA、DSA和ECDSA等。
RSA加密算法
RSA加密算法是一种非对称加密算法,它的密钥包括公钥和私钥。公钥用于加密数据,私钥用于解密数据。以下是RSA加密算法的示例代码:
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.PrivateKey;
import java.security.PublicKey;
import javax.crypto.Cipher;
public class RsaDemo {
public static void main(String[] args) throws Exception {
String content = "Hello, world!";
KeyPair keyPair = generateKeyPair();
PublicKey publicKey = keyPair.getPublic();
PrivateKey privateKey = keyPair.getPrivate();
byte[] encrypt = rsaEncrypt(content.getBytes(), publicKey);
System.out.println("加密后:" + new String(encrypt));
byte[] decrypt = rsaDecrypt(encrypt, privateKey);
System.out.println("解密后:" + new String(decrypt));
}
public static KeyPair generateKeyPair() throws Exception {
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
keyPairGenerator.initialize(1024);
return keyPairGenerator.generateKeyPair();
}
public static byte[] rsaEncrypt(byte[] content, PublicKey publicKey) throws Exception {
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
return cipher.doFinal(content);
}
public static byte[] rsaDecrypt(byte[] content, PrivateKey privateKey) throws Exception {
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.DECRYPT_MODE, privateKey);
return cipher.doFinal(content);
}
}
总结
本文对Java常用的加密算法进行了详细讲解,包括对称加密算法和非对称加密算法。本文还给出了两个示例说明,分别涉及DES加密算法和AES加密算法。需要注意的是,加密和解密操作需要保证使用相同的密钥或密钥对,否则无法进行正确的加解密操作。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java常用加密算法实例总结 - Python技术站