/**
* 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加密和Base64编码的实现,它可以被扩展以支持其他加密模式。理解AES的工作原理、ECB与其他模式的区别,以及Base64编码的作用,对于改进和使用这样的加密库至关重要。在...
Base64是一种常见的数据编码方式,它将任意的二进制数据转化为可打印的ASCII字符序列,常用于在网络上传输二进制数据。在VB(Visual Basic)编程中,实现Base64的加密和解密功能是开发安全系统的一个重要环节。本...
4. **解码与反序列化**:在接收端,收到Base64编码的字符串后,首先进行Base64解码,恢复出原始的二进制流。然后,利用同样的PB协议,通过反序列化函数将二进制流转换回原来的结构化数据对象。 5. **应用场景**:PB...
在AES加密后的密文是二进制格式,不便于直接显示或传输,通过Base64编码,可以将密文转换为可读的字符序列,方便处理。 为了在Linux上实现这个功能,开发者需要理解以下几个关键点: - **C库的使用**:Linux上常见...
在IT领域,编码和解码是数据处理的重要环节,Base64是一种常见的编码方式,用于将二进制数据转换为可打印的ASCII字符序列。在Java编程中,Base64编码和解码常用于在网络传输或者存储时处理含有非ASCII字符的数据。本...
解码这个文件,首先需要进行Base64解码,得到原始的二进制数据,然后利用Protocol Buffers的反序列化机制还原出原始的结构化信息。 在信息安全实践中,单纯使用Base64编码并不能提供足够的安全保护,因为它不涉及...
4. 解密后的数据会被反序列化,如果存在可利用的反序列化 gadget,那么恶意代码将被执行。 【AES加密与解密】 AES(Advanced Encryption Standard)是一种常用的对称加密算法。在Shiro的反序列化漏洞中,AES用于...
Base64的实现则通常包含编码和解码两个函数,处理输入的字节序列和输出的Base64字符串。 以下是一个简单的示例流程: 1. 初始化RC4算法:调用初始化函数,传入预定义的密钥。 2. 加密:使用RC4的加密函数,传入...
// 初始化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这三种常见的加密算法,并提供相关的源代码示例。 首先,Base64是一种用于在网络上传输二进制数据的编码方式,它将任意的8位字节序列转化为可打印的ASCII字符。Base64的基本原理是将...
在IT行业中,序列化和反序列化是两个关键的概念,特别是在数据存储、网络通信和对象持久化等场景中。在C#编程语言中,这些技术被广泛使用,尤其是在处理用户登录信息时,如用户名和密码的安全存储和传输。本文将详细...
在检索数据时,从数据库中取出字节流,先用PB反序列化恢复Base64字符串,然后解码得到原始的加密二进制数据,最后使用相同的EBbase64解密算法进行解密,还原出原始信息。 由于Base64编码后的数据比原始二进制数据要...
这种加密方式通常通过某种加密算法(如AES、DES等)结合Base64进行,先加密数据,再进行Base64编码,提高数据的安全性。 在C++中实现加密功能,可以使用各种开源库,如OpenSSL,它提供了丰富的加密和哈希函数。...
5. 对象序列化与反序列化:在JS和Java间传递加密对象时,可能需要将加密结果转换为字符串(如Base64编码)以便在网络中传输。 总的来说,"AES+RSA加密解密(js和java互通)"项目旨在解决跨平台间的加密通信问题,...
2. **可预测的 IV(初始化向量)**:IV 是基于加密的 Cookie 进行 base64 解码后的前 16 个字节,由于它是可预测的,攻击者可以控制它,进一步操纵序列化数据。 3. **不安全的序列化**:Shiro 使用了不安全的序列化...
4. 序列化后的数据通过 encrypt 方法进行加密,使用 AES 算法,获取加密密钥,并在 JcaCipherService 类中执行加密操作。 解密过程主要包括: 1. 检查请求中的 rememberMe 字段,如果存在,会调用 ...
- 为了使加密的字节可读,使用了Base64编码,这是将字节序列转换为ASCII字符串的常见方式。 - `BASE64Encoder`和`BASE64Decoder`用于进行Base64的编码和解码,但这些类在较新的Java版本中已被弃用,应使用`java....
4. **数据存储**:为了传输或保存加密后的数据,通常需要将密钥、IV和密文一起序列化。这可以通过Base64编码实现,以便在文本格式下安全传输。 ```java String encodedKey = Base64.getEncoder().encodeToString...
4. 数据格式转换:由于Java、Android和Web平台间可能存在字节序或数据格式差异,可能需要对加密后的字节数组进行Base64编码或JSON序列化。 5. 安全存储:私钥需要在本地安全存储,如Android的KeyStore系统。 6. 端间...
C#的序列化和反序列化技术(如BinaryFormatter或Json.NET)可以方便地完成这个任务。 5. **错误处理与异常处理**:在加密和解密过程中可能会出现各种异常,如密钥长度不匹配、解密失败等。良好的错误处理机制能确保...