首页 话题 小组 问答 好文 用户 我的社区 域名交易 唠叨

[教程]揭秘Java实现Vigenère密码的奥秘:从原理到实战,轻松解锁古典加密艺术

发布于 2025-06-23 20:50:19
0
1277

Vigenère密码是一种历史悠久的加密算法,它通过将明文与密钥进行结合,形成密文,以达到保护数据的目的。本文将深入探讨Vigenère密码的原理,并详细讲解如何使用Java语言实现这一古典加密艺术。...

Vigenère密码是一种历史悠久的加密算法,它通过将明文与密钥进行结合,形成密文,以达到保护数据的目的。本文将深入探讨Vigenère密码的原理,并详细讲解如何使用Java语言实现这一古典加密艺术。

Vigenère密码原理

Vigenère密码是一种多表置换密码,它的工作原理是将明文与密钥进行结合,通过密钥中的字母位置来决定每个明文字母的加密方式。以下是Vigenère密码的基本步骤:

  1. 创建密钥:选择一个关键字,例如 “LEMON”,并将其重复直至其长度与明文相等,例如 “LEMONLEMON”。
  2. 将密钥转换为数字:将关键字转换为数字,例如 “LEMON” 每个字母在字母表中的位置是 12,5,13,15,14,将 “LEMONLEMON” 转换为 12,5,13,15,14,12,5,13,15,14。
  3. 编写明文:编写要加密的消息,例如 “HELLO”。
  4. 将明文转换为数字:将明文中的每个字母转换为它在字母表中的位置,例如 “HELLO”会被转换为 8,5,12,12,15。
  5. 加密:对每个明文字母使用密钥中的对应数字进行加密。例如,H 是第 8 个字母,L 的加密方式是密钥中的第 4 个数字,因此 H 要用密钥中的第 4 个数字加密。具体操作是每个明文字母加上对应关键字字母的位置数,如果超过了 26 就从头开始。
  6. 解密:通过减去密钥中的数字来恢复原始的明文。

Java实现Vigenère密码

下面是使用Java语言实现Vigenère密码的示例代码:

public class VigenereCipher { public static String encrypt(String text, String key) { StringBuilder encrypted = new StringBuilder(); for (int i = 0, j = 0; i < text.length(); i++) { char c = text.charAt(i); if (Character.isLetter(c)) { char keyChar = key.charAt(j % key.length()); int keyShift = Character.toLowerCase(keyChar) - 'a'; int shifted = (Character.toLowerCase(c) - 'a' + keyShift) % 26; encrypted.append((c >= 'a') ? (char) ('a' + shifted) : (char) ('A' + shifted)); j++; } else { encrypted.append(c); } } return encrypted.toString(); } public static String decrypt(String text, String key) { StringBuilder decrypted = new StringBuilder(); for (int i = 0, j = 0; i < text.length(); i++) { char c = text.charAt(i); if (Character.isLetter(c)) { char keyChar = key.charAt(j % key.length()); int keyShift = Character.toLowerCase(keyChar) - 'a'; int shifted = (Character.toLowerCase(c) - 'a' - keyShift + 26) % 26; decrypted.append((c >= 'a') ? (char) ('a' + shifted) : (char) ('A' + shifted)); j++; } else { decrypted.append(c); } } return decrypted.toString(); } public static void main(String[] args) { String text = "HELLO"; String key = "LEMON"; String encryptedText = encrypt(text, key); String decryptedText = decrypt(encryptedText, key); System.out.println("Original Text: " + text); System.out.println("Encrypted Text: " + encryptedText); System.out.println("Decrypted Text: " + decryptedText); }
}

在这个示例中,VigenereCipher 类实现了Vigenère密码的加密和解密方法。在 main 方法中,定义了一个密钥为 “LEMON” 的Vigenère密码实例,然后对明文 “HELLO” 进行加密和解密。

通过以上内容,我们不仅了解了Vigenère密码的原理,还学会了如何使用Java语言实现这一古典加密艺术。希望这篇文章能够帮助您更好地理解Vigenère密码及其在Java中的实现。

评论
一个月内的热帖推荐
csdn大佬
Lv.1普通用户

452398

帖子

22

小组

841

积分

赞助商广告
站长交流