赞
踩
凯撒密码:它是一种替换加密的技术,明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。
例如,当偏移量是3的时候,所有的字母A将被替换成D,B变成E,以此类推。
注意:凯撒密码的偏移方向并无固定,可以是前移也可以是后移。在实际应用中,无论向左还是向右,只要偏移量是预先约定好的,并且加密与解密双方使用相同的规则,就可以正确地进行信息传递和还原。
- #include <stdio.h>
- #include <string.h>
-
- int main() {
- char s[20], r[20];
- int n;
-
- printf("请输入密文(凯撒解密):");
- fgets(s, sizeof(s), stdin);
- s[strcspn(s, "\n")] = '\0'; // 移除可能的换行符
- printf("请输入偏移量:");
- scanf("%d", &n);
-
- int len = strlen(s);
- for (int i = 0; s[i] != '\0' && i < len; i++) {
- if (s[i] >= 'A' && s[i] <= 'Z') {
- r[i] = ((s[i] - 'A' - n + 26) % 26) + 'A'; // 对于大写字母,解密时应当减去偏移量
- } else if (s[i] >= 'a' && s[i] <= 'z') {
- r[i] = ((s[i] - 'a' - n + 26) % 26) + 'a'; // 对于小写字母,解密时同样减去偏移量
- } else {
- r[i] = s[i]; // 其他非字母字符原样复制
- }
- }
-
- // 给解密结果字符串添加终止符
- r[len] = '\0';
-
- printf("解密后的明文为:");
- for (int i = 0; r[i] != '\0'; i++) {
- printf("%c", r[i]);
- }
-
- return 0;
- }
密文:simplessn
偏移量:3 (因为是左移解密,实际上是-3)
明文:pfjmibppk
加密与解密代码类似,只需将偏移量相同,修改偏移方向即可。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。