`
caniggia1986
  • 浏览: 151477 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

对象序列反序列化AES加密后Base64处理

    博客分类:
  • java
阅读更多
	/**
	 * AES加密
	 * @param content 需要加密的内容 *
	 * @param key 加密密码 *
	 * @return
	 */
	public static byte[] encrypt(byte[] content, String key) {
		try {
			KeyGenerator kgen = KeyGenerator.getInstance("AES");
			kgen.init(128, new SecureRandom(key.getBytes()));
			SecretKey secretKey = kgen.generateKey();
			byte[] enCodeFormat = secretKey.getEncoded();
			SecretKeySpec keySpec = new SecretKeySpec(enCodeFormat, "AES");
			Cipher cipher = Cipher.getInstance("AES");// 创建密码器
			byte[] byteContent = content;
			cipher.init(Cipher.ENCRYPT_MODE, keySpec);// 初始化
			byte[] result = cipher.doFinal(byteContent);
			return result; // 加密
		} catch (NoSuchAlgorithmException e) {
			e.printStackTrace();
		} catch (NoSuchPaddingException e) {
			e.printStackTrace();
		} catch (InvalidKeyException e) {
			e.printStackTrace();
		} catch (IllegalBlockSizeException e) {
			e.printStackTrace();
		} catch (BadPaddingException e) {
			e.printStackTrace();
		}
		return null;
	}
	/**
	 * AES解密 
	 * @param content  待解密内容
	 * @param key解密密钥
	 * @return
	 */
	public static byte[] decrypt(byte[] content, String key) {
		try {
			KeyGenerator kgen = KeyGenerator.getInstance("AES");
			kgen.init(128, new SecureRandom(key.getBytes()));
			SecretKey secretKey = kgen.generateKey();
			byte[] enCodeFormat = secretKey.getEncoded();
			SecretKeySpec keySpec = new SecretKeySpec(enCodeFormat, "AES");
			Cipher cipher = Cipher.getInstance("AES");// 创建密码器
			cipher.init(Cipher.DECRYPT_MODE, keySpec);// 初始化
			byte[] result = cipher.doFinal(content);
			return result; // 加密
		} catch (NoSuchAlgorithmException e) {
			e.printStackTrace();
		} catch (NoSuchPaddingException e) {
			e.printStackTrace();
		} catch (InvalidKeyException e) {
			e.printStackTrace();
		} catch (IllegalBlockSizeException e) {
			e.printStackTrace();
		} catch (BadPaddingException e) {
			e.printStackTrace();
		}
		return null;
	} 
	/**
	 * 对象转换成字串 
	 */
	public static String object2String(Object o) throws Exception {
		ByteArrayOutputStream baos = new ByteArrayOutputStream();
		ObjectOutputStream oos = new ObjectOutputStream(baos);
		oos.writeObject(o);
		byte[] byteArray = baos.toByteArray();  
		byteArray = encrypt(byteArray,key); 
		String str = Base64.encode(byteArray);
 		return str;
	}
	/**
	 * 字串转换成对象 
	 */ 
	public static Object string2Object(String info) throws Exception {
		byte[] byteArray = Base64.decode(info); 
		byteArray = decrypt(byteArray,key); 
		ByteArrayInputStream bais = new ByteArrayInputStream(byteArray);
		ObjectInputStream ois = new ObjectInputStream(bais);
		return ois.readObject();
	}
	


分享到:
评论

相关推荐

    C++_AES_ECB_base64

    总结,C++_AES_ECB_base64是一个关于C++中AES加密和Base64编码的实现,它可以被扩展以支持其他加密模式。理解AES的工作原理、ECB与其他模式的区别,以及Base64编码的作用,对于改进和使用这样的加密库至关重要。在...

    Base64 个性化加密解密功能VB源码

    Base64是一种常见的数据编码方式,它将任意的二进制数据转化为可打印的ASCII字符序列,常用于在网络上传输二进制数据。在VB(Visual Basic)编程中,实现Base64的加密和解密功能是开发安全系统的一个重要环节。本...

    PB封装base64加密

    4. **解码与反序列化**:在接收端,收到Base64编码的字符串后,首先进行Base64解码,恢复出原始的二进制流。然后,利用同样的PB协议,通过反序列化函数将二进制流转换回原来的结构化数据对象。 5. **应用场景**:PB...

    Linux上运行的C语言的AES加密算法

    在AES加密后的密文是二进制格式,不便于直接显示或传输,通过Base64编码,可以将密文转换为可读的字符序列,方便处理。 为了在Linux上实现这个功能,开发者需要理解以下几个关键点: - **C库的使用**:Linux上常见...

    base64转码解密成明文加密成Java密文

    在IT领域,编码和解码是数据处理的重要环节,Base64是一种常见的编码方式,用于将二进制数据转换为可打印的ASCII字符序列。在Java编程中,Base64编码和解码常用于在网络传输或者存储时处理含有非ASCII字符的数据。本...

    base64_文件加密

    解码这个文件,首先需要进行Base64解码,得到原始的二进制数据,然后利用Protocol Buffers的反序列化机制还原出原始的结构化信息。 在信息安全实践中,单纯使用Base64编码并不能提供足够的安全保护,因为它不涉及...

    Shiro反序列化流量分析.pdf

    4. 解密后的数据会被反序列化,如果存在可利用的反序列化 gadget,那么恶意代码将被执行。 【AES加密与解密】 AES(Advanced Encryption Standard)是一种常用的对称加密算法。在Shiro的反序列化漏洞中,AES用于...

    (VS2010 C++)基于RC4和Base64的加解密算法实现,可用于项目开发

    Base64的实现则通常包含编码和解码两个函数,处理输入的字节序列和输出的Base64字符串。 以下是一个简单的示例流程: 1. 初始化RC4算法:调用初始化函数,传入预定义的密钥。 2. 加密:使用RC4的加密函数,传入...

    .net 加密解密demo[Base64]

    // 初始化AES加密器 Aes aes = Aes.Create(); aes.Key = Encoding.UTF8.GetBytes("密钥"); aes.IV = Encoding.UTF8.GetBytes("向量"); ICryptoTransform encryptor = aes.CreateEncryptor(aes.Key, aes.IV); ...

    aes,des及base64算法文档和演示源代码

    本文将详细介绍AES、DES和Base64这三种常见的加密算法,并提供相关的源代码示例。 首先,Base64是一种用于在网络上传输二进制数据的编码方式,它将任意的8位字节序列转化为可打印的ASCII字符。Base64的基本原理是将...

    序列化反序列用户名与密码

    在IT行业中,序列化和反序列化是两个关键的概念,特别是在数据存储、网络通信和对象持久化等场景中。在C#编程语言中,这些技术被广泛使用,尤其是在处理用户登录信息时,如用户名和密码的安全存储和传输。本文将详细...

    EBbase64加密解密

    在检索数据时,从数据库中取出字节流,先用PB反序列化恢复Base64字符串,然后解码得到原始的加密二进制数据,最后使用相同的EBbase64解密算法进行解密,还原出原始信息。 由于Base64编码后的数据比原始二进制数据要...

    vs08 base64编解码 C++ 实现

    这种加密方式通常通过某种加密算法(如AES、DES等)结合Base64进行,先加密数据,再进行Base64编码,提高数据的安全性。 在C++中实现加密功能,可以使用各种开源库,如OpenSSL,它提供了丰富的加密和哈希函数。...

    AES+RSA加密解密(js和java互通).zip

    5. 对象序列化与反序列化:在JS和Java间传递加密对象时,可能需要将加密结果转换为字符串(如Base64编码)以便在网络中传输。 总的来说,"AES+RSA加密解密(js和java互通)"项目旨在解决跨平台间的加密通信问题,...

    shiro550反序列学习.doc

    2. **可预测的 IV(初始化向量)**:IV 是基于加密的 Cookie 进行 base64 解码后的前 16 个字节,由于它是可预测的,攻击者可以控制它,进一步操纵序列化数据。 3. **不安全的序列化**:Shiro 使用了不安全的序列化...

    S09-shiro550反序列学习1

    4. 序列化后的数据通过 encrypt 方法进行加密,使用 AES 算法,获取加密密钥,并在 JcaCipherService 类中执行加密操作。 解密过程主要包括: 1. 检查请求中的 rememberMe 字段,如果存在,会调用 ...

    关于AES加密算法在linux下解密失败的解决办法

    - 为了使加密的字节可读,使用了Base64编码,这是将字节序列转换为ASCII字符串的常见方式。 - `BASE64Encoder`和`BASE64Decoder`用于进行Base64的编码和解码,但这些类在较新的Java版本中已被弃用,应使用`java....

    Java实现的AES程序

    4. **数据存储**:为了传输或保存加密后的数据,通常需要将密钥、IV和密文一起序列化。这可以通过Base64编码实现,以便在文本格式下安全传输。 ```java String encodedKey = Base64.getEncoder().encodeToString...

    java、android、web三端通用的RSA和AES工具

    4. 数据格式转换:由于Java、Android和Web平台间可能存在字节序或数据格式差异,可能需要对加密后的字节数组进行Base64编码或JSON序列化。 5. 安全存储:私钥需要在本地安全存储,如Android的KeyStore系统。 6. 端间...

    .NET加密数据报完整实例源码

    C#的序列化和反序列化技术(如BinaryFormatter或Json.NET)可以方便地完成这个任务。 5. **错误处理与异常处理**:在加密和解密过程中可能会出现各种异常,如密钥长度不匹配、解密失败等。良好的错误处理机制能确保...

Global site tag (gtag.js) - Google Analytics