维吉尼亚密码题

维吉尼亚密码

题目原文:
  • 密文:ivar as {dkk gky tk seqtb kno a aw ykui hlhpi}
  • 采用维吉尼亚加密求明文:flag is {…}
(二)解题过程:
  • 根据题目已知密文ivar as与明文flag is 是对应关系,因此可以猜测出密钥前6位是dkalsa。
第一步
  • 根据维吉尼亚密码加密是采用分组加密方法,因此我们试着按照密钥为dkalsa,对密文进行解密,可以得到:

在这里插入图片描述

第二步
  • 确定密钥长度,因此采用追个增加密钥长度的方法试验密文解密,直到遇到重复正确的明文。
1. 密钥长度是7:

在这里插入图片描述

  • 可以看出由于密钥长度不正确因此出现解密出来明文杂乱的情况。
2. 密钥长度是8:

在这里插入图片描述

还是乱的。

3.
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
密码是一种基于多表替换密码的加密算法,它使用一个关键字和明文进行加密和解密。下面是使用C语言实现维密码的基本步骤: 1. 定义关键字:选择一个关键字作为加密和解密的密钥。关键字可以是任意长度的字符串,通常由字母组成。 2. 明文转换:将明文转换为数字,可以使用ASCII码将每个字符映射为对应的数字。 3. 关键字扩展:将关键字扩展为与明文长度相同的字符串。可以使用循环来实现关键字的扩展。 4. 加密/解密:将明文字符与关键字字符进行对应位置的加密/解密操作。加密操作可以通过将明文字符与关键字字符相加并取模得到密文字符。解密操作可以通过将密文字符与关键字字符相减并取模得到明文字符。 5. 密文转换:将加密后的数字转换回对应的字符,可以使用ASCII码将数字映射为对应的字符。 下面是一个简单的C语言实现维密码的示例代码: ```c #include <stdio.h> #include <string.h> void vigenereEncrypt(char* plaintext, char* keyword) { int plaintextLen = strlen(plaintext); int keywordLen = strlen(keyword); char ciphertext[plaintextLen + 1]; for (int i = 0; i < plaintextLen; i++) { ciphertext[i] = ((plaintext[i] - 'a' + keyword[i % keywordLen] - 'a') % 26) + 'a'; } ciphertext[plaintextLen] = '\0'; printf("Ciphertext: %s\n", ciphertext); } void vigenereDecrypt(char* ciphertext, char* keyword) { int ciphertextLen = strlen(ciphertext); int keywordLen = strlen(keyword); char plaintext[ciphertextLen + 1]; for (int i = 0; i < ciphertextLen; i++) { plaintext[i] = ((ciphertext[i] - 'a' - keyword[i % keywordLen] + 'a' + 26) % 26) + 'a'; } plaintext[ciphertextLen] = '\0'; printf("Plaintext: %s\n", plaintext); } int main() { char plaintext[] = "hello"; char keyword[] = "key"; vigenereEncrypt(plaintext, keyword); vigenereDecrypt("uryyb", keyword); return 0; } ``` 这段代码实现了维密码的加密和解密功能。在示例中,明文为"hello",关键字为"key",加密后的密文为"uryyb",解密后的明文为"hello"。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值