【问题标题】:Is Java serialization comparable with encryption? [duplicate]Java 序列化可以与加密相媲美吗? [复制]
【发布时间】:2026-01-31 02:30:01
【问题描述】:

我只是想澄清一下Java序列化过程的概念。它明确指出它有助于将对象的状态转换为字节序列,这意味着它有助于将对象的信息保存为字节形式。

我的问题是,Java的序列化和反序列化过程是否可以与网络的加密和解密过程相媲美?这是我的简单代码:

package com.java;

import java.io.Serializable;

public class employee implements Serializable
{
   public String firstName;
   public String lastName;

}

这里的员工类实现了Serializable接口。它有两个变量firstName和lastName。很OK:

package com.java;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;

public class SerializaitonClass {

public static void main(String[] args) {
employee emp = new employee();
emp.firstName = "Gary";
emp.lastName = "Michel";

try {
FileOutputStream fileOut = new FileOutputStream("./employee.txt");
ObjectOutputStream out = new ObjectOutputStream(fileOut);
out.writeObject(emp);
out.close();
fileOut.close();
System.out.printf("Serialized data is saved in ./employee.txt file");
} 
catch (IOException i) {
i.printStackTrace();
}
}
}

在SerializaitonClass类中,创建员工对象并访问实例变量(名字,姓氏)并初始化值。

当我运行它时,它会创建 employee.txt 文件。

当打开这个文件时,我会这样

¬í sr com.java.employeeÜ@<~â™` L    firstNamet Ljava/lang/String;L lastNameq ~ xpt Garyt Michel

因此它将整个对象的信息转换为字节格式。当我使用反序列化时,我会得到想要的输出。

那么,我可以将此过程与网络中的加密过程进行比较吗?也许我完全错了,所以请帮助我理解。

【问题讨论】:

标签: java encryption serialization deserialization


【解决方案1】:

它们并没有真正进行比较,加密采用一系列字节并以某种方式修改它们,因此只有正确的接收者才能撤消修改。

序列化只是收集对象的数据,这些数据位于不同的内存位置,并创建一个包含所有数据的字节数组,以便您可以传输它。您可以将其视为将 Java 对象“转换”为字符串,然后从该字符串中恢复对象。

但是任何拥有序列化对象的人都可以对其进行反序列化。

【讨论】:

    【解决方案2】:

    不,您不能将 Java 序列化和反序列化与密码学进行比较。

    加密是使用密钥和加密算法对您的信息进行编码的过程。信息只能由授权方解密。

    Java 序列化遵循一组rules 来生成字节序列。如果您想通过网络传递序列化对象,您可能需要对序列化字节使用另一层加密来实现数据完整性。

    【讨论】:

    • 'Interspersed' 的描述不正确。
    • 谢谢@EJP,我现在已经更正了。
    最近更新 更多