当前位置: 首页 > news >正文

完整的加密解密aes

import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.util.Base64;

import javax.crypto.Cipher;

public class RSAUtil {

// 生成 RSA 密钥对(2048位)
public static void generateKeyPair() throws Exception {KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA");kpg.initialize(2048); // 使用2048位长度KeyPair kp = kpg.generateKeyPair();String publicKey = Base64.getEncoder().encodeToString(kp.getPublic().getEncoded());String privateKey = Base64.getEncoder().encodeToString(kp.getPrivate().getEncoded());System.out.println("公钥(Base64编码):\n" + publicKey);System.out.println("\n私钥(Base64编码):\n" + privateKey);
}/*** 使用 Base64 编码的公钥加密数据** @param data 待加密的数据* @param base64PublicKey 公钥(Base64编码)* @return 加密后的 Base64 字符串*/
public static String encrypt(String data, String base64PublicKey) throws Exception {byte[] decodedKey = Base64.getDecoder().decode(base64PublicKey);PublicKey publicKey = KeyFactory.getInstance("RSA").generatePublic(new java.security.spec.X509EncodedKeySpec(decodedKey));Cipher cipher = Cipher.getInstance("RSA/ECB/OAEPWithSHA-256AndMGF1Padding");cipher.init(Cipher.ENCRYPT_MODE, publicKey);byte[] encryptedBytes = cipher.doFinal(data.getBytes("UTF-8"));return Base64.getEncoder().encodeToString(encryptedBytes);
}/*** 使用 Base64 编码的私钥解密数据** @param encryptedData 加密后的 Base64 字符串* @param base64PrivateKey 私钥(Base64编码)* @return 解密后的原始字符串*/
public static String decrypt(String encryptedData, String base64PrivateKey) throws Exception {byte[] pkcs8Bytes = Base64.getDecoder().decode(base64PrivateKey);PrivateKey privateKey = KeyFactory.getInstance("RSA").generatePrivate(new java.security.spec.PKCS8EncodedKeySpec(pkcs8Bytes));Cipher cipher = Cipher.getInstance("RSA/ECB/OAEPWithSHA-256AndMGF1Padding");cipher.init(Cipher.DECRYPT_MODE, privateKey);byte[] decryptedBytes = cipher.doFinal(Base64.getDecoder().decode(encryptedData));return new String(decryptedBytes, "UTF-8");
}// ✅ 示例主函数:演示加密和解密流程
public static void main(String[] args) throws Exception {// Step 1: 生成密钥对(可注释掉,只运行一次即可)generateKeyPair();// Step 2: 模拟前端传来的公钥(从上面复制过来)String publicKey = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA..."; // 替换为实际公钥String privateKey = "MIIEvQIBADANBgkqhkiG9w0BAQEFAASC..."; // 替换为实际私钥String original = "这是需要加密的内容";// Step 3: 加密String encrypted = encrypt(original, publicKey);System.out.println("加密结果:" + encrypted);// Step 4: 解密String decrypted = decrypt(encrypted, privateKey);System.out.println("解密结果:" + decrypted);
}

}

相关文章:

  • C#中清空DataGridView的方法
  • rk3568 , mipi 屏幕调试(3588s 可以显示,但是3568 不能显示)
  • 【堆垛策略】设计方法
  • NFT模式:数字资产确权与链游经济系统构建
  • BeckHoff -->电脑与PLC连接
  • 今天做的力扣SQL
  • 基于FPGA的PID算法学习———实现P比例控制算法
  • 轻量级屏蔽文件管理方案
  • 深入浅出JavaScript中的ArrayBuffer:二进制数据的“瑞士军刀”
  • 端口扫描介绍及使用(学习笔记)
  • 苍穹外卖-day02
  • Profinet转CAN网关如何实现profinet与can协议互转
  • C++中auto和auto
  • 即梦图片 3.0 智能参考全量上线,开启 AI 设计零门槛新时代
  • 在 Windows 11 上创建新本地用户账户
  • 三元组 题解
  • 【Dv3Admin】系统视图登录日志API文件解析
  • qt 双缓冲案例对比
  • Vue 自动导入函数和变量插件 unplugin-auto-import
  • Vue动态/异步组件
  • 做网站用哪个预装系统/市场调研报告模板
  • 工程建设项目全套流程/seo优化关键词分类
  • 手机网站与微信结合/广州seo好找工作吗
  • win2003做网站/线上网络推广怎么做
  • 网上做问卷调查网站/微信管理系统登录入口
  • 淘宝网站c#设计怎么做/百度惠生活怎么优化排名