Playfair Cipher Program in Java2025年5月6日 | 阅读 10 分钟 Playfair 密码由 **Charles Whetstone** 于 1889 年提出。但以他的朋友 **Lord Lyon Playfair** 的名字命名,因为他推广了它的使用。它是最受欢迎的对称加密技术之一,属于替换密码。它是一种一次加密多个字母的编码过程。在本节中,我们将讨论 **Playfair 密码**及其在 **Java 程序**中的实现。 Playfair 密码Playfair 密码是一种用于加密或编码消息的加密算法。它与传统密码相同。唯一的区别是它加密的是一个 **二字母组**(两个字母的对),而不是单个字母。 它首先创建一个 5*5 矩阵的密钥表。该矩阵包含作为明文加密密钥的字母。请注意,任何字母都不应重复。另一点需要注意的是,有 26 个字母,我们只有 25 个方块可以放入字母。因此,有一个多余的字母,所以一个字母将被省略(通常是 J)。但是,如果明文中包含 J,则 **J** 被替换为 **I**。这意味着将 I 和 J 视为相同的字母。 由于 Playfair 密码是 **逐二字母组** 加密消息,因此 Playfair 密码是 **二字母组替换密码** 的一个例子。 在继续之前,让我们了解 Playfair 密码中使用的术语。 术语
Playfair 密码的优点
Playfair 密码的局限性Playfair 密码的局限性如下:
Playfair 密码加密规则1. 首先,将明文分成 **二字母组**(两个字母的对)。如果明文的字母数量为奇数,则在明文末尾附加字母 **Z**。这样明文就变成 **偶数** 了。例如,明文 **MANGO** 有五个字母。因此,无法形成二字母组。由于我们会附加字母 **Z** 在明文末尾,即 **MANGOZ**。 2. 之后,将明文分成 **二字母组**(两个字母的对)。如果任何字母出现两次(并排),则在第二个字母的位置放入 **X**。假设明文是 **COMMUNICATE**,那么它的二字母组就是 **CO MX MU NI CA TE**。同样,明文 **JAZZ** 的二字母组将是 **JA ZX ZX**,明文 **GREET** 的二字母组将是 **GR EX ET**。 3. 要确定密文(加密)文本,首先,构建一个 5*5 的密钥矩阵或密钥表,并按照以下说明用字母填充它:
![]() 请注意,上述矩阵中没有重复的字母。第一行(绿色)的字母代表关键字,其余字母按字母顺序排列。 4. 可能有以下三种情况: i) 如果一对字母(二字母组)出现在同一行 在这种情况下,将二字母组中的每个字母替换为右侧的字母。如果右侧没有字母,则考虑同一行的第一个字母作为右侧字母。假设 **Z** 是一个需要右侧字母的字母,在这种情况下,**T** 将是 Z 的右侧。 ![]() ii) 如果一对字母(二字母组)出现在同一列 在这种情况下,将二字母组中的每个字母替换为它们下方的字母。如果没有下方字母,则绕回到同一列的顶部。假设 **W** 是一个需要下方字母的字母,在这种情况下,**V** 将是 W 的下方。 ![]() iii) 如果一对字母(二字母组)出现在不同的行和不同的列 在这种情况下,从 5*5 矩阵中选择一个 3*3 矩阵,使得字母对出现在 3*3 矩阵中。因为它们占据了矩阵内正方形的两个相对角。另一个角将是给定二字母组的密文。 换句话说,我们可以说 H 和 Y 的交点将是第一个字母的密文, 假设二字母组是 **HY**,我们需要找到它的密文。我们注意到 H 和 Y 都出现在不同的行和不同的列。在这种情况下,我们需要选择一个 3*3 矩阵,以便 H 和 Y 都出现在 3*3 矩阵中(用黄色突出显示)。现在,我们将仅考虑选定的矩阵来查找密文。 ![]() 现在要找到 HY 的密文,我们将考虑与 HY **相对** 的对角线,即 **LU**。因此,**H** 的密文将是 **L**,**Y** 的密文将是 **U**。 ![]() 注意:二字母组内的字母顺序不重要。Playfair 密码解密解密过程与加密相同,但步骤是 **反向** 应用的。解密时,密码是对称的(沿行向左移动,沿列向上移动)。文本接收者拥有相同的密钥,并且可以创建用于解密消息的相同密钥表。 让我们看一个 Playfair 密码的例子。 Playfair 密码示例假设明文是 **COMMUNICATION**,用于加密明文的密钥是 **COMPUTER**。密钥可以是任何单词或短语。让我们加密消息 **COMMUNICATION**。 1. 首先,将明文分成二字母组(根据规则 2),即 **CO MX MU NI CA TE**。 2. 构建一个 5*5 密钥矩阵(根据规则 3)。在本例中,密钥是 **COMPUTER**。 ![]() 3. 现在,我们将逐对遍历密钥矩阵,并找到对应对的加密文本。
因此,明文 **COMMUNICATE** 被加密为 **OMRMPCSGPTER**。 ![]() 让我们在 Java 程序中实现上述逻辑。 Playfair Java 程序PlayfairCipher.java 输出 1 ![]() 输出 2 ![]() 输出 3 ![]() 与单字母替换密码相比,Playfair 密码(多字母替换密码)更安全。因为在单字母替换密码中,攻击者只需搜索 26 个字母。而在多字母替换密码中,攻击者必须搜索 262(676)个二字母组。攻击者仍然可以破解单字母替换密码。尽管频率分析更加困难,并且使用了现代计算技术。因此,对 Playfair 密码进行双重替换和转置可以大大提高其安全性。 |
Java 是最广泛使用的编程语言之一,它不断发展以提高开发人员的生产力和代码可读性。随着 Java 10 的发布,引入了 var 关键字,允许开发人员声明局部变量而不必显式指定其数据类型。这项功能带来了...
阅读 4 分钟
使用有限自动机的模式搜索是一种字符串匹配技术,它使用有限状态机在文本中查找模式的出现。它会预处理模式以创建转换表,从而通过常数时间状态转换实现高效的文本扫描。此方法可确保确定性和快速...
阅读 6 分钟
到目前为止,我们一直专注于 Java 中的对象。自 Java 8 以来,函数式编程方面得到了更多的重视。JavaSoft 的人意识到,一切都使用对象变得麻烦,在某些情况下使用函数可能更有效。Lambda 表达式...
阅读 4 分钟
巴斯塔尔是印度恰蒂斯加尔邦一个风景如画的地区,而爪哇是印度尼西亚一个重要的岛屿,乍一看可能相去甚远。一个坐落在茂密森林和原住民部落之间的文化天堂,另一个是东南亚一个繁华的技术中心...
阅读 4 分钟
Dots and Boxes,也称为“Dot Game”或“Squares”,是一款经典的纸笔游戏,几十年来一直受到各个年龄段人群的喜爱。在本文中,我们将引导您完成在 Java 中创建 Dots and Boxes 游戏的过程,其中...
7 分钟阅读
在 Java 中,“绑定”一词描述了 Java 编译器将对方法或函数在语句主体中的调用的关联方式。简单来说,绑定就是 Java 编译器在调用时查找适当方法的过程...
阅读 4 分钟
?在 Java 中,可以通过利用字符串操作和字符分类方法来分析字符串的构成,并计算不同字符类型(如大写字母、小写字母、数字和特殊字符)的百分比。本节将引导您逐步完成此过程,...
阅读 3 分钟
变量是编程领域中数据存储和操作的基本组成部分。除了使值在程序中可用外,它们还提供了一种临时保存值的方法。但是,并非所有变量都是均等创建的。每个变量都有一个作用域,用于指定...
阅读 3 分钟
Java 中的内存管理 在 Java 中,内存管理是指对象的分配和去分配过程,称为内存管理。Java 会自动进行内存管理。Java 使用称为垃圾收集器的自动内存管理系统。因此,我们不需要实现内存管理逻辑...
14 分钟阅读
java.io # 提供了各种类,用于从文件系统、 CD 等各种源向程序输入数据,以及用于输出。# 中的各种类将在下面讨论:类描述 BufferedInputStream 类负责为其他输入...提供功能。
阅读 6 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India