如何实现Java中的简单加密和解密函数?
发布时间:2023-06-24 16:55:00
Java中的加密和解密函数可以通过Java加密扩展(Java Cryptography Extension)库来实现。该库提供了多种加密算法,包括对称加密(如AES和DES)和非对称加密(如RSA和DSA)。
对称加密算法:
对称加密算法是指加解密使用相同密钥的算法。常用的对称加密算法有AES和DES。
1. AES加密和解密
AES(Advanced Encryption Standard)是一种高级加密标准,可用于保护敏感数据。下面是AES加密和解密的示例代码:
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import java.util.Base64;
public class AESUtil {
private static final String KEY = "AES1234567890123"; // 密钥,长度为16位
public static String encrypt(String value) throws Exception {
SecretKeySpec secretKeySpec = new SecretKeySpec(KEY.getBytes(), "AES");
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec);
byte[] encrypted = cipher.doFinal(value.getBytes());
return Base64.getEncoder().encodeToString(encrypted);
}
public static String decrypt(String value) throws Exception {
SecretKeySpec secretKeySpec = new SecretKeySpec(KEY.getBytes(), "AES");
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.DECRYPT_MODE, secretKeySpec);
byte[] decoded = Base64.getDecoder().decode(value);
byte[] decrypted = cipher.doFinal(decoded);
return new String(decrypted);
}
}
2. DES加密和解密
DES(Data Encryption Standard)是一种对称加密算法,用于保护数据免遭未经授权的访问。下面是DES加密和解密的示例代码:
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import java.util.Base64;
public class DESUtil {
private static final String KEY = "DES12345"; // 密钥
public static String encrypt(String value) throws Exception {
KeyGenerator keyGenerator = KeyGenerator.getInstance("DES");
keyGenerator.init(56);
SecretKey secretKey = keyGenerator.generateKey();
SecretKeySpec secretKeySpec = new SecretKeySpec(KEY.getBytes(), "DES");
Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec);
byte[] encrypted = cipher.doFinal(value.getBytes());
return Base64.getEncoder().encodeToString(encrypted);
}
public static String decrypt(String value) throws Exception {
SecretKeySpec secretKeySpec = new SecretKeySpec(KEY.getBytes(), "DES");
Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
cipher.init(Cipher.DECRYPT_MODE, secretKeySpec);
byte[] decoded = Base64.getDecoder().decode(value);
byte[] decrypted = cipher.doFinal(decoded);
return new String(decrypted);
}
}
非对称加密算法:
非对称加密算法是指加解密使用两个不同密钥的算法。常用的非对称加密算法有RSA和DSA。
1. RSA加密和解密
RSA(Rivest–Shamir–Adleman)算法是一种非对称加密算法,广泛用于数据加密和数字签名。下面是RSA加密和解密的示例代码:
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 java.util.Base64;
import javax.crypto.Cipher;
public class RSAUtil {
private static final String PUBLIC_KEY = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC6MZT7vEZz83OkF0X3qLjyz+RGxT/fgqhGK6kA
zlv3uSvBJvqZJCLEyMvMBNcpSvZ5/cCG7YoD3yBn95JhYXRYKp6RMTVmpxeYF/wMKLSc/Nfh0q9s
3cQ2s84rFFHUm3qGat4TfIvsL1kfc0JG7m+/aHcLl5KKV6sPVwIDAQAB";
private static final String PRIVATE_KEY = "MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBALoxlPu8RnPzc6QXRfeouPLP5EbF
P9+CqEYrqQDPmW/e5K8Em+pkkIsTIy8wE1ylK9nn9wIbtigPfIGf3kmFhdFgqnpExNWanF5gX/Aw
otJz814dKvbN3ENrPOKxRR1Jt6hmrhN8i+wvWR9zQkbub79odwuXkoptXqw9XAgMBAAECgYEAjbX
CtNB0krq3hlwpfXm3KjBr06hqGUt42fOOLgCKgPxMFPHdGK9eddc6JGG3S4EL4xC6b12Xl+1tTJE
550JwREt3l5qW8cp94Axk7G3fwbCPtoZDdbCR5nd8ym/DgSnoLwqQJLW+6W/EqSjnMWdYgvDuNBb
lF6ix1n7fuGK6Gb+M9kCQQDsL6w1QMe7yY/+qXGA2lLfE1pM5UIiEbs4POW8LF2T9mT44jTrd3li
pnCcexElZmyuQ4CuxTEtPJ7uTSFiifzDAkEA5AE4TVtg+PbifoyKs88Y9xRrnxK8DRjD5T/5Wjqj
II6aTQGKm5z1y0pysVx5VD28v6LthcZlwsS2ir1xGAtyZQJBAJZzB3jkrAPZyg00w1mjnPrmXH7
oER0pYNGeYKb7xVj5STreeGagfq721nLZ4INyE7N3b9MlLET/dyl0oZrUz8CQD17C0EXWgXfkql
w7KfSUyBv5G7wA31ht1K+yw5+oiAjLnAVimdsZ87J33pE6tChedP1FKhe5KHNWH+Cm/q3xECQQCi
ahJf29pRfF4x34t96Q/aIfF4dCi+9mQva3vKq9SXEhX9Vv6O8KWlVw0WzNch/ryJQcyyvT2hqCxP
M/dEwJzg";
public static String encrypt(String value) throws Exception {
PKCS8EncodedKeySpec pkcs8EncodedKeySpec = new PKCS8EncodedKeySpec(Base64.getDecoder().decode(PRIVATE_KEY));
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
keyPairGenerator.initialize(1024);
KeyPair keyPair = keyPairGenerator.generateKeyPair();
PublicKey publicKey = keyPair.getPublic();
PrivateKey privateKey = keyPair.getPrivate();
X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(Base64.getDecoder().decode(PUBLIC_KEY));
publicKey = KeyFactory.getInstance("RSA").generatePublic(x509EncodedKeySpec);
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
byte[] encrypted = cipher.doFinal(value.getBytes());
return Base64.getEncoder().encodeToString(encrypted);
}
public static String decrypt(String value) throws Exception {
PKCS8EncodedKeySpec pkcs8EncodedKeySpec = new PKCS8EncodedKeySpec(Base64.getDecoder().decode(PRIVATE_KEY));
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
PrivateKey privateKey = keyFactory.generatePrivate(pkcs8EncodedKeySpec);
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.DECRYPT_MODE, privateKey);
byte[] decoded = Base64.getDecoder().decode(value);
byte[] decrypted = cipher.doFinal(decoded);
return new String(decrypted);
}
}
2. DSA加密和解密
DSA(Digital Signature Algorithm)是一种数字签名算法,用于确认数字内容
