在序列化过程中,虚拟机会试图调用对象类里的 writeObject 和 readObject 方法,进行用户自定义的序列化和反序列化,如果没有这样的方法,则默认调用是 ObjectOutputStream 的 defaultWriteObject 方法以及 ObjectInputStream 的 defaultReadObject 方法。用户自定义的 writeObject 和 readObject 方法可以允许用户控制序列化的过程,比如可以在序列化的过程中动态改变序列化的数值。基于这个原理,可以在实际应用中得到使用,用于敏感字段的加密工作。

测试代码如下:

import java.io.*;
import java.io.ObjectInputStream.GetField;
import java.io.ObjectOutputStream.PutField;public class Student  implements Serializable {private String password="passwd";public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}private void writeObject(ObjectOutputStream out) {try {PutField pf=out.putFields();System.out.println("原密码:" + password);password="newpasswd";//模拟加密过程pf.put("password", password);System.out.println("加密后密码:" + password);out.writeFields();}catch (IOException e) {e.printStackTrace();}}private void readObject(ObjectInputStream in) throws Exception {try {GetField gf=in.readFields();Object o=gf.get("password", "");System.out.println("要解密的字符串:" + o.toString());password = "passwd";//模拟解密,需要获得本地的密钥System.out.println("解密后字符串:" + password);}catch (IOException e) {e.printStackTrace();}}
}

加密关键字段代码:

import java.io.*;public class SerializableDemo {public static void main(String[] args) throws Exception {// TODO Auto-generated method stubStudent stu =new Student();ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(new File("E:/Student.txt")));oos.writeObject(stu);System.out.println("Student对象序列化成功!");oos.close();}
}

解密关键字段代码:

import java.io.*;
public class AnotherProgram {public static void main(String[] args) throws IOException, Exception {// TODO Auto-generated method stubObjectInputStream ois = new ObjectInputStream(new FileInputStream(new File("E:/Student.txt")));Student student = (Student) ois.readObject();System.out.println("Student对象反序列化成功!");;}}

Java序列化敏感字段加密相关推荐

  1. springboot实现敏感字段加密存储,解密显示

    springboot实现敏感字段加密存储,解密显示,通过mybatis,自定义注解+AOP切面,Base64加解密方式实现功能. 1.代码实现: 创建springboot项目 添加依赖 <dep ...

  2. 敏感字段加密,叶俊峰

    /** 标题:敏感字段加密 | 时间限制:1秒 | 内存限制:262144K | 语言限制:不限 [敏感字段加密]给定一个由多个命令字组成的命令字符串: 1.字符串长度小于等于127字节,只包含大小写 ...

  3. MYSQL敏感字段加密存储

    出于安全考虑,有时会要求数据表存储的敏感字段加密,比如身份证和手机号. MySQL加密和解密 INSERT INTO user (`idcard`) VALUES(HEX(AES_ENCRYPT('x ...

  4. 华为od统一考试B卷【敏感字段加密】JavaScript 实现

       所有题目均有五种语言实现.C语言实现目录.C++ 实现目录.Python实现目录.Java实现目录.JavaScript实现目录 题目 给定一个由多个命令字组成的命令字符串: 1.字符串长度小于 ...

  5. java基础(十)-----Java 序列化的高级认识

    将 Java 对象序列化为二进制文件的 Java 序列化技术是 Java 系列技术中一个较为重要的技术点,在大部分情况下,开发人员只需要了解被序列化的类需要实现 Serializable 接口,使用 ...

  6. 深入理解JAVA序列化

    2019独角兽企业重金招聘Python工程师标准>>> 如果你只知道实现 Serializable 接口的对象,可以序列化为本地文件.那你最好再阅读该篇文章,文章对序列化进行了更深一 ...

  7. Java 序列化的高级认识

    这篇文章来自:http://www.ibm.com/developerworks/cn/java/j-lo-serial/index.html 引言 将 Java 对象序列化为二进制文件的 Java ...

  8. 【通知】+ java基础提升篇:Java 序列化的高级认识

    点击上方"好好学java",选择"置顶公众号" 优秀学习资源.干货第一时间送达! 好好学java java知识分享/学习资源免费分享 关注 精彩内容 你所需要的 ...

  9. java基础提升篇:Java 序列化的高级认识

    如果你只知道实现 Serializable 接口的对象,可以序列化为本地文件.那你最好再阅读该篇文章,文章对序列化进行了更深一步的讨论,用实际的例子代码讲述了序列化的高级认识,包括父类序列化的问题.静 ...

最新文章

  1. 面试官问:Kafka 会不会丢消息?怎么处理的?
  2. linux冒泡算法程序,用蛮力法解决冒泡排序 - linux-tao的个人空间 - OSCHINA - 中文开源技术交流社区...
  3. 用 Spark 为 Elasticsearch 导入搜索数据
  4. iOS7以下设备获取mac地址
  5. 指针数组、数组指针、数组的区别与联系
  6. 什么是Scanner?next()和hasNext() ? nextLine()和hasNextLine()?
  7. maven 多模块项目
  8. ORACLE 11GR2 RAC new features 新特性。
  9. CSS 滤镜学习小结
  10. 泛函分析 04.03 有界线性算子 - 一致有界原则
  11. Ubuntu Vmware虚拟机网络配置(二)
  12. 服务器固件测试--PCI设备的介绍(集成网卡和外插网卡)
  13. 2018-3 至2018-5 菜鸟初涉
  14. EMC EMI EMS 介绍
  15. 多账号统一登陆,账号模块的系统设计
  16. 现代密码学的第一次高光时刻
  17. mysql+xf01x,[613]redis数据迁移
  18. 我本不属于人间—献给全世界最伟大的女性
  19. 安装目录里无法找到计算机,安装软件弹出系统找不到指定的路径提示解决方法...
  20. 数据备份、存储应该使用什么介质 光碟or硬盘or磁带

热门文章

  1. c++ opencv添加logo_关于opencv对图片添加水印
  2. CSharp 类型转换
  3. 苹果 iOS 内购三步曲:App 内退款、历史订单查询、绑定用户防掉单
  4. 用vue实现城市选择组件
  5. python语言程序的运行方式是什么_python源程序执行的方式有什么
  6. maya刷权重时有个叉_Maya权重如何刷取
  7. SpringCloud eureka 高集群注册中心
  8. 下雪啦 也用Matlab实现大雪纷飞 Matlab雪花
  9. 发电全流程闭环大数据智能控制方案2020
  10. 红蜻蜓抓图精灵 网页截图 ,Ctrl+Shift+C