Vigenere密码(案例:Vigenere密码加密单词”explanation“,秘钥为”leg“。)

Vigenere密码

是什么

是使用一系列凯撒密码组成密码字母表的加密算法,属于 多表密码 的一种简单形式。

为什么

针对单表代替密码容易被频率分析法破解的缺点,人们提出多表代换密码,用一系列(两个以上)代换表依次对明文消息的字母进行代换。Vigenere密码是一种著名的多表代换密码。

怎么做

示例 (密码编码学与网络安全习题2.19)

案例:Vigenere密码加密单词”explanation“,秘钥为”leg“。

(1) 设字母数字对应表为:

ABCDEFGHIJKLM
0123456789101112
NOPQRSTUVWXYZ
13141516171819202122232425

(2) 设n=3,密钥是leg,这相应于密钥k=(11,4,6),明文是“explanation”, 用(Vigenere)密码对其加密。

解:首先将明文按每3个分为一组,然后与密钥进行模26加计算,得如下算式结果:

explan
4231511013
11461146
1512122419
PBVWET
ation
01981413
1146114
1123142517
LXOZR

综上所述,加密为PBVWETLXOZR

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当然可以!下面是一个使用C++实现Vigenere密码加密的示例代码: ```cpp #include <iostream> #include <string> std::string encryptVigenere(const std::string& plainText, const std::string& key) { std::string encryptedText = plainText; int keyLength = key.length(); int textLength = plainText.length(); for (int i = 0; i < textLength; i++) { char plainChar = plainText[i]; char keyChar = key[i % keyLength]; char encryptedChar; if (isalpha(plainChar)) { if (islower(plainChar)) { encryptedChar = 'a' + (plainChar - 'a' + toupper(keyChar) - 'A') % 26; } else { encryptedChar = 'A' + (plainChar - 'A' + toupper(keyChar) - 'A') % 26; } } else { encryptedChar = plainChar; } encryptedText[i] = encryptedChar; } return encryptedText; } int main() { std::string plainText, key; std::cout << "Enter the plain text: "; std::getline(std::cin, plainText); std::cout << "Enter the key: "; std::getline(std::cin, key); std::string encryptedText = encryptVigenere(plainText, key); std::cout << "Encrypted text: " << encryptedText << std::endl; return 0; } ``` 这个示例代码中的 `encryptVigenere` 函数接受两个参数:明文和密钥。它会对明文进行 Vigenere 加密,并返回加密后的密文。 在 `main` 函数中,用户可以输入明文和密钥,然后调用 `encryptVigenere` 函数进行加密,并输出加密后的密文。 请注意,这只是一个简单的实现示例,没有包含对输入的合法性进行检查。在实际应用中,你可能需要添加更多的错误处理和边界情况的处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值