C中密码的解密
Decryption of cypher in C
我正在用 C 语言制作凯撒图书馆。
库源代码包含以下函数,returns 给定字符的加密等价物:
char cypher_charac(char charac, int key)
{
if (islower(charac)) {
charac = 'a' + (charac - 'a' + key) % 26 ;
return charac ;
} else if (isupper(charac)) {
charac = 'A' + (charac - 'A' + key) % 26 ;
return charac
} else{
return charac ;
}
}
该函数在调用加密时效果很好。
但是,当用于解密(key = -key)时,函数returns非字母字符。
我已经检查了多个论坛和不同的代码,但我就是看不到。
谢谢!
问题在于如何在 C 中为负数定义 %
余数运算 - 负数的余数是负数,绝对不在 0 - 25 范围内! C中%
的定义与Python的定义不同,但与Javascript.
的定义类似
考虑使用 13 作为加密密钥的行业标准 ROT13 算法。现在如果 charac
= 'A'
,那么 charac - 'A' + key
将等于 -13
而 (-13) % 26
是 still -13
.将其添加到 'A'
,您将不会有 'N'
,而是 '4'
!
要获得正确的解密密钥,您必须从 26 中减去加密密钥,而不是取反(即key = 26 - key
).对于 ROT13,它将是 26 - 13
,再次等于 13。对于标准剖腹产 ROT3,解密密钥将为 23。对于 ROT26,解密密钥将为 0。同样,您的方法在 Python 也许还有许多其他编程语言,但那是因为 (-13) % 26
结果是 +13,而不是 -13!
感谢您的回答。问题已解决。
如前所述,问题出在C中的%定义上
当我替换时它起作用了:
charac = 'a' + (charac - 'a' + key) % 26
代码中
与 :
charac = 'a' + (((charac - 'a' + cle) % 26) + 26) % 26
这对负键和正键都有效。
我正在用 C 语言制作凯撒图书馆。 库源代码包含以下函数,returns 给定字符的加密等价物:
char cypher_charac(char charac, int key)
{
if (islower(charac)) {
charac = 'a' + (charac - 'a' + key) % 26 ;
return charac ;
} else if (isupper(charac)) {
charac = 'A' + (charac - 'A' + key) % 26 ;
return charac
} else{
return charac ;
}
}
该函数在调用加密时效果很好。 但是,当用于解密(key = -key)时,函数returns非字母字符。
我已经检查了多个论坛和不同的代码,但我就是看不到。
谢谢!
问题在于如何在 C 中为负数定义 %
余数运算 - 负数的余数是负数,绝对不在 0 - 25 范围内! C中%
的定义与Python的定义不同,但与Javascript.
考虑使用 13 作为加密密钥的行业标准 ROT13 算法。现在如果 charac
= 'A'
,那么 charac - 'A' + key
将等于 -13
而 (-13) % 26
是 still -13
.将其添加到 'A'
,您将不会有 'N'
,而是 '4'
!
要获得正确的解密密钥,您必须从 26 中减去加密密钥,而不是取反(即key = 26 - key
).对于 ROT13,它将是 26 - 13
,再次等于 13。对于标准剖腹产 ROT3,解密密钥将为 23。对于 ROT26,解密密钥将为 0。同样,您的方法在 Python 也许还有许多其他编程语言,但那是因为 (-13) % 26
结果是 +13,而不是 -13!
感谢您的回答。问题已解决。
如前所述,问题出在C中的%定义上
当我替换时它起作用了:
charac = 'a' + (charac - 'a' + key) % 26
代码中
与 :
charac = 'a' + (((charac - 'a' + cle) % 26) + 26) % 26
这对负键和正键都有效。