常见的Java加密算法有以下几种:对称加密算法、非对称加密算法和散列算法。
- 对称加密算法
对称加密算法是指发送方和接收方使用相同的密钥对数据进行加密和解密。常见的对称加密算法有DES、3DES、AES、Blowfish等。
以AES算法为例,以下为使用步骤:
1)生成密钥
SecretKey secretKey = KeyGenerator.getInstance("AES").generateKey();
2)加密数据
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.ENCRYPT_MODE, secretKey);
byte[] encryptedData = cipher.doFinal("hello world".getBytes());
3)解密数据
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.DECRYPT_MODE, secretKey);
byte[] decryptedData = cipher.doFinal(encryptedData);
- 非对称加密算法
非对称加密算法是指发送方和接收方使用不同的密钥对数据进行加密和解密。常见的非对称加密算法有RSA、DSA等。
以RSA算法为例,以下为使用步骤:
1)生成密钥对
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
keyPairGenerator.initialize(2048);
KeyPair keyPair = keyPairGenerator.generateKeyPair();
PrivateKey privateKey = keyPair.getPrivate();
PublicKey publicKey = keyPair.getPublic();
2)加密数据
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
byte[] encryptedData = cipher.doFinal("hello world".getBytes());
3)解密数据
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.DECRYPT_MODE, privateKey);
byte[] decryptedData = cipher.doFinal(encryptedData);
- 散列算法
散列算法是指将任意长度的数据转换为固定长度的散列值的算法。常见的散列算法有MD5、SHA1、SHA256等。
以MD5算法为例,以下为使用步骤:
1)计算散列值
MessageDigest messageDigest = MessageDigest.getInstance("MD5");
byte[] md5Bytes = messageDigest.digest("hello world".getBytes());
String md5Str = new BigInteger(1, md5Bytes).toString(16);
至少包含两条示例说明:
示例1:使用AES算法对文件进行加密和解密
// 加密文件
public static void encryptFile(File sourceFile, File destFile) throws Exception {
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.ENCRYPT_MODE, getSecretKey());
FileInputStream fis = new FileInputStream(sourceFile);
FileOutputStream fos = new FileOutputStream(destFile);
byte[] buffer = new byte[1024];
int len;
while ((len = fis.read(buffer)) != -1) {
byte[] encryptedData = cipher.update(buffer, 0, len);
fos.write(encryptedData);
}
byte[] encryptedData = cipher.doFinal();
fos.write(encryptedData);
fis.close();
fos.close();
}
// 解密文件
public static void decryptFile(File sourceFile, File destFile) throws Exception {
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.DECRYPT_MODE, getSecretKey());
FileInputStream fis = new FileInputStream(sourceFile);
FileOutputStream fos = new FileOutputStream(destFile);
byte[] buffer = new byte[1024];
int len;
while ((len = fis.read(buffer)) != -1) {
byte[] decryptedData = cipher.update(buffer, 0, len);
fos.write(decryptedData);
}
byte[] decryptedData = cipher.doFinal();
fos.write(decryptedData);
fis.close();
fos.close();
}
// 获取AES密钥
public static SecretKey getSecretKey() throws NoSuchAlgorithmException {
KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
keyGenerator.init(128);
return keyGenerator.generateKey();
}
示例2:使用MD5算法对密码进行加密和验证
// 对密码进行加密
public static String encryptPassword(String password) throws NoSuchAlgorithmException {
MessageDigest messageDigest = MessageDigest.getInstance("MD5");
byte[] md5Bytes = messageDigest.digest(password.getBytes());
return new BigInteger(1, md5Bytes).toString(16);
}
// 验证密码是否正确
public static boolean verifyPassword(String inputPassword, String encryptedPassword) throws NoSuchAlgorithmException {
return encryptedPassword.equals(encryptPassword(inputPassword));
}
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:常见的Java加密算法有哪些? - Python技术站