Java Code for DES29 Mar 2025 | 7 分钟阅读 我们对互联网的依赖日益增加,我们与他人分享大量个人信息。由于我们的数据或个人信息不安全。因此,数据安全对我们至关重要。我们需要使数据保密、不被修改,并且只能由授权的读者访问。我们可以通过使用 DES(数据加密标准) 机制来确保数据安全,该机制可以 加密 和 解密 数据。使用 DES 算法 是加密和解密数据最流行的方式。它是一种广泛使用的 对称(加密和解密)算法。 在本节中,我们将学习用于生成 密文 的 DES 算法。此外,我们还将在 Java 程序 中实现 DES 算法。 ![]() DES 算法DES 代表数据加密标准。它是一种对称密钥分组密码算法,用于加密和解密数据。它由 IBM 团队于 20 世纪 70 年代初开发。它接受 64 位分组的明文,并将其转换为使用 64 位密钥加密数据的密文。该算法使用相同的密钥来加密和解密数据。 它基于 LUCIFER(也称为 Feistel 分组密码算法),它是 DES 算法的直接前身。由 IBM 的杰出学者和研究员 Horst Feistel 开发。它通过使用 128 位密钥块和 128 位块大小提供高安全性。DES 算法使用 16 轮 Feistel 结构。该结构为每轮使用一个唯一的密钥。最后,在 1976 年,它被批准为联邦加密标准。 2002 年,AES(高级加密标准)取代 DES 加密算法成为公认的标准。之后在 1995 年,引入了 DES 算法的增强版本,称为 Triple DES(3DES 或 TDES)。正式名称为 Triple Data Encryption Algorithm(TDEA 或 3DEA)。 TDEA 也是一种对称密钥分组密码算法,它对每个数据块使用 DES 密码算法三次。其块大小为 64 位,密钥大小分别为 168、112 和 56 位,分别对应密钥 1、2 和 3。它还使用与 DES 相当的轮数,即 48 轮。这意味着每个密钥有 16 轮。 ![]() 它使用第一个密钥(k1)加密数据,使用第二个密钥(k2)解密数据,然后再次使用第三个密钥(k3)加密数据。该算法的另一种变体仅使用两个密钥 k1 和 k3。其中密钥 k1 和 k3 相同。它仍然在使用,但被视为遗留算法。 下图显示了使用 TDEA 进行的加密和解密。 ![]() 让我们来理解 DES 算法。 生成密钥该算法执行 16 轮加密,并且为每一轮生成一个唯一的密钥。在进行步骤之前,了解明文中的位标记为 1 到 64 很重要,其中 1 是最高有效位,64 是最低有效位。生成密钥的步骤如下: 1. 首先,我们使用下表将给定的 64 位密钥压缩并置换为 48 位密钥。 2. 将结果分成两个相等的 C 和 D 部分。 3. C 和 D 部分进行循环左移。对于加密,第 1、2、9 和 16 轮负责将位左移 1 位,循环进行。所有剩余的轮左移 2 位,循环进行。 4. 之后,使用下表将结果压缩为 48 位。 5. 从步骤 3 获得的结果将成为下一轮密钥生成的输入。 算法的加密步骤该算法包括以下步骤:
![]() 算法的解密步骤对于密文的解密,我们使用相同的算法,但顺序相反(步骤 4)的 16 轮密钥。 为了更好地理解算法,让我们看看 DES 算法的操作模式。 DES 的操作模式有以下五种可供选择的操作模式:
我们得出结论,算法的基本步骤是:
让我们在 Java 程序中实现 DES 算法,看看数据是如何使用该算法进行加密和解密的。 DesProgram.java 在运行上述程序之前,您需要对程序进行一些更改。首先,您需要创建一个您想要加密的文本文件。在本例中,我们创建了一个名为 DemoData.txt 的文件,并将以下文本写入其中。您可以写任何内容。 DemoData.txt ![]() 让我们运行上面的程序,看看输出。 输出 ![]() 当我们运行上面的程序时,它会在指定位置生成两个文件 encrypteddata.txt 和 deecrypteddata.txt。让我们看看加密和解密文件里面有什么。 encrypteddata.txt ![]() deecrypteddata.txt ![]() 我们看到数据已解密为与我们在 DemoData.txt 文件中写入的相同文本。 |
堆栈在原则上是线性数据结构。简单的后进先出(LIFO)集合是最后添加到堆栈的项,也是第一个移除的项。堆栈的基本操作包括 push、pop 和 peek。但是,操作堆栈的中间元素...
5 分钟阅读
Java 是一种非常流行的面向对象编程语言,用于创建各种应用程序。Java 编写泛型方法的能力是其最强大的特性之一。任何可用于多种对象类型的技术都称为泛型。开发人员可以设计可重用代码...
7 分钟阅读
如何在 Java 中初始化数组?Java 初始化数组基本上是 Java 中用于初始化数组的术语。我们知道数组是相似类型数据的集合。数组是一种非常重要的数据结构,用于解决编程问题……
阅读 2 分钟
将一种数据类型转换为另一种数据类型的过程称为类型转换,向上转型和向下转型是对象类型转换的类型。在 Java 中,对象也可以像数据类型一样进行类型转换。父对象和子对象是两种类型的对象。所以,有...
阅读 4 分钟
java.time.format.DecimalStyle 类包含 withZeroDigit() 方法。Java 中的 DecimalStyle 类用于配置用于表示该 DecimalStyle 的 Locale 的零字符。接收字符作为输入后,此函数将返回一个包含修改后的负值的 DecimalStyle 对象...
阅读 3 分钟
Java 中的构造函数链 在 Java 中,构造函数与方法相同,但唯一的区别是构造函数与类名相同。它用于创建类的实例。当……时,它会自动调用。
5 分钟阅读
在 Java 编程中,“找不到符号”错误意味着编译器无法识别代码中使用的特定标识符,例如变量名或方法名。当您尝试使用未正确声明的变量、方法、类或其他标识符时,会出现此错误...
阅读 10 分钟
java.nio.CharBuffer 类有一个 clear() 函数来清空缓冲区。在清除此缓冲区时进行的修改如下:位置为零。当限制设置为容量时,标记将被丢弃。语法:public final DoubleBuffer clear() ...
阅读 3 分钟
在本节中,我们将创建 Java 程序,以生成指定范围(0 到 n)内的二进制数。可以通过二叉树生成从 1 到 n 的二进制数。我们知道在树中,每个节点都有两个子节点...
阅读 3 分钟
如何在 Java 中获取时间戳 时间戳是一系列字符或编码信息,用于标识某个事件发生的时间,通常给出日期和一天中的时间,有时精确到小数的某个分数。时间戳通常与计算机事件相关,但是...
阅读 3 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India