解析Java中的数据加密与解密技术

1. 数据加密与解密概述

2. 对称加密算法示例

package cn.juwatech.encryption;

import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import java.util.Base64;

public class AESEncryption {

private static final String ALGORITHM = "AES";

// 生成AES密钥
public static SecretKey generateAESKey() throws Exception {

KeyGenerator keyGenerator = KeyGenerator.getInstance(ALGORITHM);
keyGenerator.init(128); // 128位密钥
return keyGenerator.generateKey();
}

// AES加密
public static String encrypt(String plaintext, SecretKey secretKey) throws Exception {

Cipher cipher = Cipher.getInstance(ALGORITHM);
cipher.init(Cipher.ENCRYPT_MODE, secretKey);
byte[] encryptedBytes = cipher.doFinal(plaintext.getBytes());
return Base64.getEncoder().encodeToString(encryptedBytes);
}

// AES解密
public static String decrypt(String ciphertext, SecretKey secretKey) throws Exception {

Cipher cipher = Cipher.getInstance(ALGORITHM);
cipher.init(Cipher.DECRYPT_MODE, secretKey);
byte[] encryptedBytes = Base64.getDecoder().decode(ciphertext);
byte[] decryptedBytes = cipher.doFinal(encryptedBytes);
return new String(decryptedBytes);
}

public static void main(String[] args) throws Exception {

SecretKey secretKey = generateAESKey();
String plaintext = "Hello, AES Encryption!";
String ciphertext = encrypt(plaintext, secretKey);
System.out.println("Encrypted: " + ciphertext);
String decryptedText = decrypt(ciphertext, secretKey);
System.out.println("Decrypted: " + decryptedText);
}
}


3. 非对称加密算法示例

package cn.juwatech.encryption;

import javax.crypto.Cipher;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.util.Base64;

public class RSAEncryption {

private static final String ALGORITHM = "RSA";

// 生成RSA密钥对
public static KeyPair generateRSAKeyPair() throws Exception {

KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance(ALGORITHM);
keyPairGenerator.initialize(2048); // 2048位密钥对
return keyPairGenerator.generateKeyPair();
}

// RSA加密
public static String encrypt(String plaintext, PublicKey publicKey) throws Exception {

Cipher cipher = Cipher.getInstance(ALGORITHM);
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
byte[] encryptedBytes = cipher.doFinal(plaintext.getBytes());
return Base64.getEncoder().encodeToString(encryptedBytes);
}

// RSA解密
public static String decrypt(String ciphertext, PrivateKey privateKey) throws Exception {

Cipher cipher = Cipher.getInstance(ALGORITHM);
byte[] encryptedBytes = Base64.getDecoder().decode(ciphertext);
cipher.init(Cipher.DECRYPT_MODE, privateKey);
byte[] decryptedBytes = cipher.doFinal(encryptedBytes);
return new String(decryptedBytes);
}

public static void main(String[] args) throws Exception {

KeyPair keyPair = generateRSAKeyPair();
String plaintext = "Hello, RSA Encryption!";
String ciphertext = encrypt(plaintext, keyPair.getPublic());
System.out.println("Encrypted: " + ciphertext);
String decryptedText = decrypt(ciphertext, keyPair.getPrivate());
System.out.println("Decrypted: " + decryptedText);
}
}


4. 使用MessageDigest进行消息摘要

package cn.juwatech.encryption;

import java.security.MessageDigest;
import java.util.Base64;

public class MessageDigestExample {

public static String generateMD5(String plaintext) throws Exception {

MessageDigest md = MessageDigest.getInstance("MD5");
byte[] mdBytes = md.digest(plaintext.getBytes());
return Base64.getEncoder().encodeToString(mdBytes);
}

public static void main(String[] args) throws Exception {

String plaintext = "Hello, MessageDigest!";
String md5Hash = generateMD5(plaintext);
System.out.println("MD5 Hash: " + md5Hash);
}
}


5. 结合实际场景的应用

|
7天前
|

Java 内存模型解析与实践

18 0
|
3天前
|

CodeFuse 代码补全插件是 CodeFuse 系列产品中用户数量最多、留存率最大，调用AI能力最多的产品~欢迎大家体验试用https://github.com/codefuse-ai/RepoFuse
24 6
|
6天前
|

【8月更文挑战第4天】边缘计算与云计算的协同工作是未来信息技术发展的重要趋势。通过合理地分配任务和资源，两者可以相互补充、发挥各自的优势，实现更高效的数据处理和分析。这种协同模式不仅提高了系统的性能和可靠性，还满足了复杂多变的应用需求，为人工智能、物联网等技术的发展提供了强有力的支持。
42 11
|
1天前
|
SQL 安全 网络安全

8 3
|
6天前
|

【8月更文挑战第4天】情感分析技术作为自然语言处理领域的重要分支，具有广泛的应用前景和重要的研究价值。通过不断的技术创新和应用实践，我们可以期待情感分析在未来发挥更大的作用，为我们的生活和工作带来更多便利和效益。
58 10
|
5天前
|
Linux 数据安全/隐私保护 Perl

【8月更文挑战第5天】Linux作为服务器与嵌入式系统的基石，其文件管理和命令行操作是技术人员必备技能。本文从文件操作和基础命令两大方面，深入浅出地解析Linux核心要义，助你在面试中脱颖而出。首先探索文件系统的树状结构及操作，包括使用ls -la浏览文件详情、touch创建文件、rm -r慎删目录、cp与mv复制移动文件、以及利用find搜索文件。接着掌握命令行技巧，如用cat、more和less查看文件内容；借助grep、sed与awk处理文本；运用ps、top和kill管理进程；并通过chmod和chown管理文件权限。
46 8
|
6天前
|

【8月更文挑战第4天】自动驾驶依托计算机视觉实现环境感知与决策，通过目标检测、跟踪及车道识别等技术保障行车安全与效率。面对数据处理、场景理解等挑战，未来技术将持续优化，深化智能驾驶体验，引领交通行业变革。
67 8
|
6天前
|

【8月更文挑战第4天】智能合约的安全审计与风险评估是保障区块链应用安全的重要环节。通过严格的代码审查、使用安全编程规范、实施权限控制以及监控和应急响应等措施，可以有效降低智能合约的安全风险。未来，随着区块链技术的不断发展和智能合约的广泛应用，对智能合约的安全审计与风险评估也将变得更加重要和复杂。因此，我们需要持续关注智能合约的安全问题，并不断探索新的安全技术和方法。
28 8
|
2天前
|

13 Java异常（异常过程解析、throw、throws、try-catch关键字）
13 Java异常（异常过程解析、throw、throws、try-catch关键字）
19 2
|
3天前
|

【域名解析DNS专栏】DNS解析中的Anycast技术：原理与优势

15 2