ToB企服应用市场:ToB评测及商务社交产业平台
标题:
Java安全——AES(对称加密)和 RSA(非对称加密)的实现
[打印本页]
作者:
火影
时间:
2024-11-15 10:21
标题:
Java安全——AES(对称加密)和 RSA(非对称加密)的实现
目次
一、对称加密和非对称加密
1.对称加密
常见算法
2.非对称加密
常见算法
3.对称加密和非对称加密的对比
二、AES(对称加密)
1.天生AES密钥
2.加密数据
3.解密数据
完整代码
三、RSA(非对称加密)
1.天生RSA密钥对
2.加密数据
3.解密数据
完整代码
一、对称加密和非对称加密
1.对称加密
对称加密利用相同的密钥举行加密和解密。这意味着发送方和接收方必须共享同一个密钥,并且必须安全地存储和传输该密钥。
常见算法
AES(高级加密尺度)
DES(数据加密尺度)
3DES(三重数据加密尺度)
RC4
2.非对称加密
非对称加密利用一对密钥:公钥和私钥。公钥用于加密数据,私钥用于解密。公钥可以公开,而私钥必须保密。
常见算法
RSA(Rivest-Shamir-Adleman)
DSA(数字签名算法)
ECC(椭圆曲线加密)
3.对称加密和非对称加密的对比
特性对称加密非对称加密密钥数量只有一个密钥(加密和解密相同)一对密钥(公钥和私钥)加密速度较快较慢安全性密钥管理复杂,密钥泄露风险高公钥可以公开,私钥保密确保安全适用场景大量数据加密密钥交换、身份验证、数字签名
二、AES(对称加密)
1.
天生AES密钥
利用KeyGenerator类天生AES密钥。
指定密钥长度,例如128位、192位或256位。
// 生成密钥
KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
keyGenerator.init(128); // 128位密钥长度(可选128,192或256位)
SecretKey secretKey = keyGenerator.generateKey();
复制代码
2.加密数据
利用Cipher类并指定AES算法。
初始化Cipher对象为加密模式(Cipher.ENCRYPT_MODE)。
利用密钥初始化Cipher对象。
加密数据
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.ENCRYPT_MODE, secretKey);
byte[] encryptedData = cipher.doFinal(dataToEncrypt.getBytes());
// 编码加密数据:将加密后的字节数据编码为Base64字符串,以便存储或传输
String encryptedDataBase64 = Base64.getEncoder().encodeToString(encryptedData);
System.out.println("加密后的数据 (经Base64编码): " + encryptedDataBase64);
复制代码
3.解密数据
利用相同的Cipher对象举行解密。
初始化Cipher对象为解密模式(Cipher.DECRYPT_MODE)。
利用相同的密钥初始化Cipher对象。
cipher.init(Cipher.DECRYPT_MODE, secretKey);
byte[] decryptedData = cipher.doFinal(Base64.getDecoder().decode(encryptedDataBase64));
System.out.println("解密后的数据:" + new String(decryptedData));
复制代码
完整代码
package com.lz.encryption;
import javax.crypto.*;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.util.Base64;
public class SymmetricEncryption {
public static void main(String[] args) throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException {
// 对字符串数据进行加密
// 待加密的数据
String dataToEncrypt = "Hello World";
// 1.生成密钥:
// 使用KeyGenerator类生成一个AES密钥
// 指定密钥长度,例如128位、192位或256位
KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
keyGenerator.init(128); // 128位密钥长度(可选128,192或256位)
SecretKey secretKey = keyGenerator.generateKey();
// 2.加密数据
// 初始化Cipher对象:
// 使用Cipher类并指定AES算法
// 初始化Cipher对象为加密模式(Cipher.ENCRYPT_MODE)。
// 使用密钥初始化Cipher对象。
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.ENCRYPT_MODE, secretKey);
byte[] encryptedData = cipher.doFinal(dataToEncrypt.getBytes());
// 编码加密数据:将加密后的字节数据编码为Base64字符串,以便存储或传输
String encryptedDataBase64 = Base64.getEncoder().encodeToString(encryptedData);
System.out.println("加密后的数据 (经Base64编码): " + encryptedDataBase64);
// 3.解密数据:
// 使用相同的Cipher对象进行解密。
// 初始化Cipher对象为解密模式(Cipher.DECRYPT_MODE)。
// 使用相同的密钥初始化Cipher对象。
cipher.init(Cipher.DECRYPT_MODE, secretKey);
byte[] decryptedData = cipher.doFinal(Base64.getDecoder().decode(encryptedDataBase64));
System.out.println("解密后的数据:" + new String(decryptedData));
}
}
复制代码
三、RSA(非对称加密)
1.天生RSA密钥对
利用KeyPairGenerator类天生RSA密钥对。
指定密钥长度,例如2048位、3072位或4096位。
// 生成RSA密钥对
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
keyPairGenerator.initialize(2048);
KeyPair keyPair = keyPairGenerator.generateKeyPair();
// 公钥
PublicKey publicKey = keyPair.getPublic();
// 私钥
PrivateKey privateKey = keyPair.getPrivate();
复制代码
2.加密数据
利用公钥初始化Cipher对象为加密模式(Cipher.ENCRYPT_MODE)。
利用公钥加密数据。
// 公钥加密数据
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
byte[] encryptedBytes = cipher.doFinal(dataToEncrypt.getBytes());
// 将加密数据编码为Base64字符串
String encryptedDataBase64 = Base64.getEncoder().encodeToString(encryptedBytes);
System.out.println("加密后的数据 (经Base64编码): " + encryptedDataBase64);
复制代码
3.解密数据
利用私钥初始化Cipher对象为解密模式(Cipher.DECRYPT_MODE)。
利用私钥解密数据。
cipher.init(Cipher.DECRYPT_MODE, privateKey);
byte[] decryptedData = cipher.doFinal(Base64.getDecoder().decode(encryptedDataBase64));
复制代码
完整代码
package com.lz.encryption;
import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.NoSuchPaddingException;
import java.security.*;
import java.util.Base64;
public class RasEncryption {
public static void main(String[] args) throws NoSuchPaddingException, NoSuchAlgorithmException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException {
// 待加密的数据
String dataToEncrypt = "Hello World";
// 1.生成RSA密钥对
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
keyPairGenerator.initialize(2048); // 2048位密钥长度
KeyPair keyPair = keyPairGenerator.generateKeyPair();
//公钥
PublicKey publicKey = keyPair.getPublic();
//私钥
PrivateKey privateKey = keyPair.getPrivate();
// 公钥加密数据
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
byte[] encryptedBytes = cipher.doFinal(dataToEncrypt.getBytes());
// 将加密数据编码为Base64字符串
String encryptedDataBase64 = Base64.getEncoder().encodeToString(encryptedBytes);
System.out.println("加密后的数据 (经Base64编码): " + encryptedDataBase64);
// 私钥解密数据
cipher.init(Cipher.DECRYPT_MODE, privateKey);
byte[] decryptedData = cipher.doFinal(Base64.getDecoder().decode(encryptedDataBase64));
// 将解密后的字节数据转换为字符串
System.out.println("解密后的数据:" + new String(decryptedData));
}
}
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/)
Powered by Discuz! X3.4