當(dāng)我們涉及到敏感數(shù)據(jù)的存儲(chǔ)和傳輸時(shí),數(shù)據(jù)加密是非常重要的。加密可以確保數(shù)據(jù)的保密性和完整性,并幫助我們防止數(shù)據(jù)泄露和攻擊。在Java中,使用標(biāo)準(zhǔn)的加密算法和庫可以很容易地實(shí)現(xiàn)數(shù)據(jù)加密和解密。本篇文章將介紹一個(gè)簡單的Java工具類,該工具類使用AES對(duì)稱加密算法來對(duì)數(shù)據(jù)進(jìn)行加密和解密。
Java已經(jīng)提供了許多加密庫和算法,包括常用的對(duì)稱加密算法和非對(duì)稱加密算法,例如AES、DES、RSA等。
以下是一個(gè)簡單的Java加解密工具類的示例,可以使用AES算法進(jìn)行加密和解密:
ENCRYPTION_ALGORITHM 和 SECRET_KEY_ALGORITHM常量分別表示使用的加密算法和密鑰算法。在此例中,使用AES算法進(jìn)行加密和解密,并使用AES算法作為密鑰算法。
HASH_ALGORITHM常量表示使用的哈希算法。在此例中,使用SHA-256哈希算法將密鑰生成為16字節(jié)的密鑰。
encrypt方法使用給定的密鑰對(duì)字符串進(jìn)行加密。首先,使用密鑰生成SecretKeySpec對(duì)象,然后使用Cipher對(duì)象和ENCRYPTION_ALGORITHM常量進(jìn)行初始化。然后,將數(shù)據(jù)字節(jié)數(shù)組進(jìn)行加密,并使用Base64編碼返回密文字符串。
decrypt方法使用給定的密鑰對(duì)字符串進(jìn)行解密。首先,使用密鑰生成SecretKeySpec對(duì)象,然后使用Cipher對(duì)象和ENCRYPTION_ALGORITHM常量進(jìn)行初始化。然后,使用Base64解碼密文字符串,并將解碼后的字節(jié)數(shù)組進(jìn)行解密。最后,返回解密后的明文字符串。
generateSecretKeySpec方法生成SecretKeySpec對(duì)象。它使用給定的密鑰字符串和HASH_ALGORITHM常量生成哈希值。然后,它將哈希值截取前16個(gè)字節(jié),用于生成SecretKeySpec對(duì)象。
注意,這只是一個(gè)簡單的示例,真正的加密應(yīng)該考慮更多的安全因素。此外,為了確保密鑰安全,密鑰應(yīng)該存儲(chǔ)在安全的地方,并且只有授權(quán)的人員才能訪問它。
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.util.Base64;
public class EncryptionUtils {
private static final String ENCRYPTION_ALGORITHM = "AES";
private static final String SECRET_KEY_ALGORITHM = "AES";
private static final String HASH_ALGORITHM = "SHA-256";
public static String encrypt(String data, String key) throws Exception {
SecretKeySpec secretKeySpec = generateSecretKeySpec(key);
Cipher cipher = Cipher.getInstance(ENCRYPTION_ALGORITHM);
cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec);
byte[] encryptedBytes = cipher.doFinal(data.getBytes(StandardCharsets.UTF_8));
return Base64.getEncoder().encodeToString(encryptedBytes);
}
public static String decrypt(String data, String key) throws Exception {
SecretKeySpec secretKeySpec = generateSecretKeySpec(key);
Cipher cipher = Cipher.getInstance(ENCRYPTION_ALGORITHM);
cipher.init(Cipher.DECRYPT_MODE, secretKeySpec);
byte[] decodedBytes = Base64.getDecoder().decode(data);
byte[] decryptedBytes = cipher.doFinal(decodedBytes);
return new String(decryptedBytes, StandardCharsets.UTF_8);
}
private static SecretKeySpec generateSecretKeySpec(String key) throws Exception {
MessageDigest sha = MessageDigest.getInstance(HASH_ALGORITHM);
byte[] keyBytes = key.getBytes(StandardCharsets.UTF_8);
byte[] hashedBytes = sha.digest(keyBytes);
byte[] truncatedBytes = new byte[16];
System.arraycopy(hashedBytes, 0, truncatedBytes, 0, truncatedBytes.length);
return new SecretKeySpec(truncatedBytes, SECRET_KEY_ALGORITHM);
}
}
在上述示例中,我們使用AES算法和SHA-256哈希算法。加密和解密函數(shù)均接受一個(gè)字符串?dāng)?shù)據(jù)和一個(gè)字符串密鑰,并返回相應(yīng)的加密/解密字符串。
注意,這只是一個(gè)簡單的示例,真正的加密應(yīng)該考慮更多的安全因素。此外,為了確保密鑰安全,密鑰應(yīng)該存儲(chǔ)在安全的地方,并且只有授權(quán)的人員才能訪問它。
下面是一個(gè)簡單的示例,演示如何使用上面提供的EncryptionUtils工具類對(duì)字符串進(jìn)行加密和解密:
public class Example {
public static void main(String[] args) {
String data = "Hello World!";
String key = "mysecretkey";
try {
// 加密數(shù)據(jù)
String encryptedData = EncryptionUtils.encrypt(data, key);
System.out.println("加密后的數(shù)據(jù): " + encryptedData);
// 解密數(shù)據(jù)
String decryptedData = EncryptionUtils.decrypt(encryptedData, key);
System.out.println("解密后的數(shù)據(jù): " + decryptedData);
} catch (Exception e) {
e.printStackTrace();
}
}
}
在上面的示例中,我們使用EncryptionUtils工具類將字符串“Hello World!”加密,使用密鑰“mysecretkey”進(jìn)行加密。然后我們解密密文,使用相同的密鑰來解密。輸出結(jié)果應(yīng)該為:
加密后的數(shù)據(jù): eUFzznJhGxtFE4G4bJOx1A==
解密后的數(shù)據(jù): Hello World!
注意,如果密鑰不正確,解密過程將會(huì)失敗,因此在實(shí)際使用中需要確保密鑰的正確性。文章來源:http://www.zghlxwxcb.cn/news/detail-501287.html
下面給大家打個(gè)廣告哈哈哈:給大家介紹一個(gè)公眾號(hào),親測方便好用。主要功能是搜索最優(yōu)優(yōu)惠券,購物返利,但是不僅僅包括京東、淘寶、拼多多等電商購物會(huì)返利,包括滴滴打車、美團(tuán)外賣以及美團(tuán)優(yōu)惠券等等都會(huì)有返利,并且返利是我見過最高的。反正用到就是賺到,絕對(duì)虧不了,能省一點(diǎn)是一點(diǎn)。而且現(xiàn)在還接入了最火熱的chatGPT,沒事的時(shí)候還可以和人工智能聊天,爽歪歪。我不允許你不知道這么牛的東西。哈哈哈,二維碼放到下面了,微信掃一掃試用一下。文章來源地址http://www.zghlxwxcb.cn/news/detail-501287.html
到了這里,關(guān)于Java實(shí)現(xiàn)AES加密工具類 - 簡單易用的數(shù)據(jù)加密解決方案的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!