一、對稱加密演算法
1、基本介紹
對稱加密演算法是一種所謂的私密密鑰加密演算法,其中使用同一個密鑰執行加密和解密操作。常見的對稱加密演算法有DES、AES、RC4等。
2、使用示例代碼
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import java.security.Security;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
public class SymmetricEncryption {
private static String key = "1234567890000000";
private static String algorithm = "AES/ECB/PKCS7Padding";
public static byte[] encrypt(byte[] data) throws Exception {
Security.addProvider(new BouncyCastleProvider());
SecretKey secretKey = new SecretKeySpec(key.getBytes(), "AES");
Cipher cipher = Cipher.getInstance(algorithm, "BC");
cipher.init(Cipher.ENCRYPT_MODE, secretKey);
return cipher.doFinal(data);
}
public static byte[] decrypt(byte[] data) throws Exception {
Security.addProvider(new BouncyCastleProvider());
SecretKey secretKey = new SecretKeySpec(key.getBytes(), "AES");
Cipher cipher = Cipher.getInstance(algorithm, "BC");
cipher.init(Cipher.DECRYPT_MODE, secretKey);
return cipher.doFinal(data);
}
}
二、非對稱加密演算法
1、基本介紹
非對稱加密演算法也稱為公鑰加密演算法,與對稱加密演算法不同,其使用一對密鑰執行加密和解密操作。使用儘可能大的密鑰位數可以提高安全性。
2、使用示例代碼
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
public class AsymmetricEncryption {
private static String algorithm = "RSA";
public static byte[] encrypt(byte[] data) throws Exception {
KeyPairGenerator kpg = KeyPairGenerator.getInstance(algorithm);
kpg.initialize(1024);
KeyPair keyPair = kpg.generateKeyPair();
Cipher cipher = Cipher.getInstance(algorithm);
cipher.init(Cipher.ENCRYPT_MODE, keyPair.getPublic());
return cipher.doFinal(data);
}
public static byte[] decrypt(byte[] data) throws Exception {
KeyPairGenerator kpg = KeyPairGenerator.getInstance(algorithm);
kpg.initialize(1024);
KeyPair keyPair = kpg.generateKeyPair();
Cipher cipher = Cipher.getInstance(algorithm);
cipher.init(Cipher.DECRYPT_MODE, keyPair.getPrivate());
return cipher.doFinal(data);
}
}
三、消息摘要演算法
1、基本介紹
消息摘要演算法是一種將任意長度的消息轉換為固定長度消息摘要的演算法。常見的消息摘要演算法有MD5、SHA-1、SHA-256等。
2、使用示例代碼
import java.security.MessageDigest;
public class MessageDigestEncryption {
private static String algorithm = "MD5";
public static byte[] encrypt(byte[] data) throws Exception {
MessageDigest md = MessageDigest.getInstance(algorithm);
md.update(data);
return md.digest();
}
}
四、數字簽名演算法
1、基本介紹
數字簽名演算法用於驗證數據的簽名是否經過修改,從而保證數據的完整性。常見的數字簽名演算法有RSA數字簽名、DSA數字簽名等。
2、使用示例代碼
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.Signature;
public class DigitalSignature {
private static String algorithm = "SHA256withRSA";
public static byte[] sign(byte[] data) throws Exception {
KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA");
kpg.initialize(1024);
KeyPair keyPair = kpg.generateKeyPair();
PrivateKey privateKey = keyPair.getPrivate();
Signature signature = Signature.getInstance(algorithm);
signature.initSign(privateKey);
signature.update(data);
return signature.sign();
}
public static boolean verify(byte[] data, byte[] sign) throws Exception {
KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA");
kpg.initialize(1024);
KeyPair keyPair = kpg.generateKeyPair();
PublicKey publicKey = keyPair.getPublic();
Signature signature = Signature.getInstance(algorithm);
signature.initVerify(publicKey);
signature.update(data);
return signature.verify(sign);
}
}
五、總結
本文詳細介紹了Java加密演算法的四個方面,涵蓋了對稱加密演算法、非對稱加密演算法、消息摘要演算法、數字簽名演算法的基本介紹和使用示例代碼。代碼部分使用Java原生API實現,可以很好地幫助開發者了解加密演算法的實現原理。
原創文章,作者:LPHNN,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/371728.html
微信掃一掃
支付寶掃一掃