c - 维吉尼亚密码。键的大小

标签 c key sizeof encryption shift

好吧,这就是我现在所拥有的,它几乎是正确的,但不会循环文本,如果 key 有大写,它也会变得困惑:-/任何提示或线索都会很棒,我不明白 key_of_the_key bcz 我'我从来没有见过我所看到的都是strlen

 #define LMIN 97
#define LMAX 122
#define UMIN 65
#define UMAX 90
#define ALPHANUM 25
int main(int argc, string argv[])
{   
int i, j, n;

 string pt = GetString();
 string key = argv[1];

for(i = 0, j = 0, n = strlen(pt); i < n; i++, j++)
{

if(pt[i]  >= LMIN||pt[i]  == LMAX){

pt[i] = ((pt[i] - LMIN) + (key[j] - LMIN)) % 26;

pt[i] += LMIN;

printf("%c", pt[i]);
}

else if (pt[i] >= UMIN||pt[i] == UMAX){

pt[i] = ((pt[i] - UMIN) + (key[j] - UMIN)) % 26;

pt[i] += UMIN;

printf("%c",pt[i]);

} else{
printf("%c", pt[i]);
}        
}
}   

最佳答案

我假设您熟悉 Vigenère cipher 如何作品。当关键短语比明文短时,它的字母会重复,直到形成相同长度的字符串,从而可以为每个明文字母计算凯撒位移。

在 C 代码中,key[k % size_of_the_key] 使用递增变量 k 依次访问关键短语的每个部分。 modulus operator (%) 确保当 k 增加超过关键短语的长度时,字母会根据需要循环多次。

如果您正在构建自己的程序,则可以使用对 strlen() 的简单调用来获取关键短语的长度。但是,在您发布的代码中,关键短语必须转换为 0 到 25 之间的值数组 (key[])。

您还应该尝试使您的代码能够使用大小写字母;看起来它只会转换当前形式的大写字母。

关于c - 维吉尼亚密码。键的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21904381/

相关文章:

C - 将字符串转换为变量名

c - C 中的位切换混淆

python - 如何确定 Python 中对象的大小?

对C中变量的范围感到困惑

c++ - 如何确定int的位数

c - 实际值存储在 pstr 中,但是该值如何存储在数组 "WORD"中

c - printf在cygwin中执行.exe文件

python - Python 最小/最大关键字函数

c++ - 有没有办法在多映射内联中查找键的数量?

c# - 带有私钥加密的公钥加密