首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Vigenere密码C++

Vigenere密码C++
EN

Stack Overflow用户
提问于 2017-05-06 23:47:37
回答 1查看 522关注 0票数 0

HZVIG.cpp:

代码语言:javascript
复制
#include "HZVIG.h"

char ROTEncode(char inchar, int rot)
{
    if (IsBigLetter(inchar))
        return ((int)inchar - (int)'A' + rot) % 26 + 'A' - 1;
    else if (IsSmallLetter(inchar))
        return ((int)inchar - (int)'a' + rot) % 26 + 'a' - 1;
    else
        return inchar;
}
char ROTDecode(char inchar, int rot)
{
    if (IsBigLetter(inchar))
        return ((int)inchar - (int)'A' - rot + 26) % 26 + 'A' - 1;
    else if (IsSmallLetter(inchar))
        return ((int)inchar - (int)'a' + rot + 26) % 26 + 'a' - 1;
    else
        return inchar;
}
std::string VIGDecode(std::string instring, std::string key)
{
    std::string result;
    for (int i = 0; i < instring.length(); i++)
        result += ROTDecode(instring[i], key[i % key.length()] - 'A' + 1);
    return result;
}
std::string VIGEncode(std::string instring, std::string key)
{
    std::string result;
    for (int i = 0; i < instring.length(); i++)
        result += ROTEncode(instring[i], key[i % key.length()] - 'A' + 1);
    return result;
}

HZVIG.h:

代码语言:javascript
复制
#include <string>

#define IsBigLetter(a) a >= 'A' && a <= 'Z'
#define IsSmallLetter(a) a >= 'a' && a <= 'z'

std::string VIGDecode(std::string instring, std::string key);
std::string VIGEncode(std::string instring, std::string key);

这段代码可以工作,但输出错误:

代码语言:javascript
复制
C:\Users\adm1n\Desktop\C\HZToolkit>HZToolkit --evig --key ALPHA HZU18{CLASSICAL_CIPHER}
HKJ18{NAHSSTRHL_NXWHEC}

应该是: HKJ18{JLADHPCAW_RPPHPG}我认为输入没问题,函数出了问题。C:\Users\adm1n\Desktop\C\HZToolkit>HZToolkit --evig --key ALPHA ALPHA输出

EN

回答 1

Stack Overflow用户

发布于 2017-05-07 04:42:34

你为什么认为这是错误的?请注意,即使明文不是字母,您仍然可以“推进”密钥(至少,这是您的程序当前所做的)。

对齐纯文本并复制密钥:

代码语言:javascript
复制
     Plain: HZU18{CLASSICAL...
       Key: ALPHAALPHAALPHA...
            ^        ^^   ^
   You get: HKJ18{NAHSSTRHL...
You expect: HKJ18{JLADHPCAW...

请注意标记为^的位置:这些位置的密钥等于A,因此不会进行加密(明文字母变为密文字母)。

我觉得挺好的。

(解密被破解了。作为提示,请注意ROTDecode不会以相同的方式处理小写和大写字母)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43822380

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档