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

加密,混淆,摘要,序列化的理解

**

1.加密

**

加密是将可读的数据(明文)转换为不可读的格式(密文)的过程。只有持有特定密钥的人才能将密文解密为明文。

**

2.摘要

**

摘要是一种单向加密,用于确保数据的完整性,通常使用哈希函数,如SHA-256,MD5。

摘要和加密都是处理数据的技术,但它们的目的和实现方式有明显的不同。下面是它们之间的主要区别:

目的

摘要(Hashing):
主要用于确保数据的完整性。
通过生成固定长度的哈希值来代表任意长度的数据,便于快速比较和验证数据是否一致。

加密(Encryption):
主要用于保护数据的机密性。
通过将数据转换为不可读的形式,仅允许授权用户通过解密恢复原始数据。

过程

摘要:
输入数据通过哈希算法处理后生成哈希值(摘要)。
哈希值是固定长度的,不可逆,即不能从哈希值中恢复出原始数据。

加密:
输入数据使用加密算法和密钥进行转换,生成密文。
密文可以通过对应的解密算法和密钥恢复为原始数据。

可逆性

摘要:
不可逆:无法从哈希值推导出原始数据。例如,SHA-256的输出是一个256位的散列值,不能反向计算得到原始输入。

加密:
可逆:使用密钥可以将密文解密回原始数据。只有持有正确密钥的用户才能访问原始信息。

输出长度

摘要:
输出长度是固定的,无论输入数据的大小如何(例如,SHA-256始终产生256位的哈希值)。

加密:
输出长度通常与输入数据大小相关,密文的长度可能与原始数据长度不同,具体取决于加密算法和填充方式。

**

3.混淆

**

混淆是对程序代码进行变形和重命名的过程,目的是使代码更难以阅读和理解,防止他人逆向工程或盗取代码。

假设你有以下简单的Java类:

java
public class Example {
    public void display() {
        System.out.println("Hello, World!");
    }
}

混淆后,它可能会变成这样:

public class a {
    public void b() {
        System.out.println("Hello, World!");
    }
}

编写代码

在开发过程中,程序员编写的代码是可读的,例如变量名、类名、方法名等都使用描述性名称。

编译

代码编译成字节码或机器码,这是软件打包的第一步。对于Java程序,编译后会生成.class文件。

混淆

在打包之前或之后,使用混淆工具对编译后的字节码进行混淆。这些工具会改变代码的结构和名称,使其更难以阅读和理解。混淆后的代码仍然可以正常运行,但代码的可读性大大降低。例如,变量名可能会被更改为短小的随机字符串。

打包

将混淆后的代码和资源打包成最终的可执行文件或库(例如JAR文件、APK文件等)。

分发

将打包好的软件分发给用户。在用户使用软件时,混淆的代码使得逆向工程变得更加困难,从而保护了软件的核心逻辑和算法。

**

4.序列化

**

序列化是一种将对象的状态转换为可以存储或传输的格式的过程。它通常用于将复杂数据结构或对象转换为字节流,以便在网络传输、持久化存储(如文件或数据库)或其他需要将对象保存到不同环境中的场景中使用。下面是关于序列化的详细说明:

1. 基本概念
序列化:将对象转换为字节流或其他可存储格式(如JSON、XML等)的过程,以便于保存或传输。
反序列化:将序列化的数据转换回原始对象的过程。
2. 用途
数据持久化:将对象的状态保存到文件或数据库中,以便于在需要时恢复。
网络传输:在不同系统之间传输对象,例如通过网络发送数据。
跨平台通信:在不同编程语言或平台之间交换数据,例如使用JSON或XML格式。
3. 常见序列化格式
二进制序列化:直接将对象的内存表示转换为字节流,通常速度较快,适用于内部存储和传输。
文本序列化:使用可读文本格式,如JSON、XML等,易于人类阅读和编辑,适用于需要与其他系统或语言交互的场景。


http://www.kler.cn/news/360831.html

相关文章:

  • 柔性数组的使用
  • 基于ECS和NAS搭建个人网盘
  • Java访问修饰符private,default,protected,public
  • LeetCode_2413. 最小偶倍数_java
  • 基于Multisim的任意进制计数器设计与仿真
  • 【Linux 从基础到进阶】磁盘I/O性能调优
  • uniapp 实现input聚焦时选中内容(已封装)兼容微信小程序
  • uniapp的相关知识(2)
  • 10.22学习
  • Recall/Coarse Ranking/Fine Ranking
  • 每日算法一练:剑指offer——数组篇(3)
  • 图像异常检测评估指标-分类性能
  • 存-20241019 CSPJ模拟测试5 题解
  • 免费开源的微信开发框架
  • CentOS安装Docker教程,及报错。
  • RK3568平台开发系列讲解(调试篇)debugfs 文件系统
  • C++中static关键字的用法(实现日期类)
  • 【Vulnhub靶场】Kioptrix Level 5
  • 【算法】深入了解 CRC 校验码的计算过程
  • 【计网笔记】应用层