????????Vigenere密码是一种经典的替代密码,它由密钥和明文组成,通过将明文中的每个字母按照密钥字母的定位进行偏移来加密数据。
下面是Vigenere密码的加密和解密过程的详细说明:
加密过程:
解密过程:
????????Vigenere密码相对于简单的凯撒密码更复杂和强大,因为它使用了一个可变的密钥来加密数据,增加了加密的难度和安全性。然而,Vigenere密码并不是绝对安全的,可以使用一些密码分析技术(如频率分析)来破解较短的密文。
以下是一个 C# 的 Vigenere 密码 的示例代码:
using System;
public class VigenereCipher
{
? ? private string key;
? ? public VigenereCipher(string key)
? ? {
? ? ? ? this.key = key.ToUpper();
? ? }
? ? public string Encrypt(string plainText)
? ? {
? ? ? ? plainText = plainText.ToUpper();
? ? ? ? string cipherText = "";
? ? ? ? for (int i = 0, j = 0; i < plainText.Length; i++)
? ? ? ? {
? ? ? ? ? ? char plainChar = plainText[i];
? ? ? ? ? ? char keyChar = key[j % key.Length];
? ? ? ? ? ? if (Char.IsLetter(plainChar))
? ? ? ? ? ? {
? ? ? ? ? ? ? ? cipherText += (char)((plainChar + keyChar - 2 * 'A') % 26 + 'A');
? ? ? ? ? ? ? ? j++;
? ? ? ? ? ? }
? ? ? ? ? ? else
? ? ? ? ? ? {
? ? ? ? ? ? ? ? cipherText += plainChar;
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? return cipherText;
? ? }
? ? public string Decrypt(string cipherText)
? ? {
? ? ? ? cipherText = cipherText.ToUpper();
? ? ? ? string plainText = "";
? ? ? ? for (int i = 0, j = 0; i < cipherText.Length; i++)
? ? ? ? {
? ? ? ? ? ? char cipherChar = cipherText[i];
? ? ? ? ? ? char keyChar = key[j % key.Length];
? ? ? ? ? ? if (Char.IsLetter(cipherChar))
? ? ? ? ? ? {
? ? ? ? ? ? ? ? plainText += (char)((cipherChar - keyChar + 26) % 26 + 'A');
? ? ? ? ? ? ? ? j++;
? ? ? ? ? ? }
? ? ? ? ? ? else
? ? ? ? ? ? {
? ? ? ? ? ? ? ? plainText += cipherChar;
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? return plainText;
? ? }
}
public class Program
{
? ? public static void Main()
? ? {
? ? ? ? string key = "KEY";
? ? ? ? string plainText = "HELLO";
? ? ? ? VigenereCipher cipher = new VigenereCipher(key);
? ? ? ? string encryptedText = cipher.Encrypt(plainText);
? ? ? ? string decryptedText = cipher.Decrypt(encryptedText);
? ? ? ? Console.WriteLine("Plain Text: " + plainText);
? ? ? ? Console.WriteLine("Encrypted Text: " + encryptedText);
? ? ? ? Console.WriteLine("Decrypted Text: " + decryptedText);
? ? }
}
????????这个示例代码定义了一个VigenereCipher类,它接受一个密钥作为构造函数的参数。然后,使用Encrypt方法对明文进行加密,使用Decrypt方法对密文进行解密。在Main方法中,我们创建了一个VigenereCipher对象,使用示例的密钥和明文进行加密和解密,并打印结果。
输出示例:
Plain Text: HELLO
Encrypted Text: VHRFO
Decrypted Text: HELLO
这个示例只是一个基本的Vigenere密码实现,可以根据需要进行进一步的修改和扩展。