凯撒密码(c语言)
作者:互联网
在以前,为了防止信息被窃取,人们使用凯撒密码来进行加密(咋感觉说得这么官方enmmm)
凯撒密码的原理很简单,就是将密码(字母或者数字加上一个偏移量,对他进行转换,比如说我输入的字符是a,偏移量是2,那么得到的是c;如果我输入字符2,偏移量也是2,那么我得到的应该是4;在此基础上,我们又可以对密码偏移量自己定义,假如密码是Aa123,我可以将大写字母偏移3个单位,也可以将小写字母偏移2个单位,数字偏移1个单位,这样子,密码的保密性就大大增加了。
知道了原理,我们还需要懂得方法,既可以读入原来的字符,又可以对其进行偏移,这时候我们就可以使用数组来解决这个问题了:
现在上代码:
#include<stdio.h>
#define maxn 80
#define m 26
int main() {
int i=0, offset,n;
int a[maxn];
printf("请输入密码:");
while ((a[i] = getchar()) != '\n') { //读入换行则表示读入字符表示结束
i++;
}
a[i + 1] = '\0';
printf("请输入偏移量:");
scanf("%d", &n);
if (n > m) {
n = n % 26; //如果偏移量大于26,则需要对26取余(其实就是多走了一圈)
}
for (i = 0; a[i] != '\0'; i++) {
if (a[i] >= 'A' && a[i] <= 'Z') {
if ((a[i] - 'A' + n) < m) { //如果字符加上偏移量后小于26,则字符直接加上偏移量
a[i] = a[i] + n;
}
else {
a[i] = a[i] - (m - n); //如果大于26,则可以使用26-偏移量,再使用字符减去刚才那个
}
}
}
for (i = 0; a[i] != '\0'; i++) {
if (a[i] >= 'a' && a[i] <= 'z') {
if ((a[i] - 'a' + n) < m) { //同理
a[i] = a[i] + n;
}
else {
a[i] = a[i] - (m - n);
}
}
}
for (i = 0; a[i] != '\0'; i++) { //按顺序输出
putchar(a[i]);
}return 0;
}
标签:字符,26,语言,++,偏移量,密码,偏移,凯撒 来源: https://www.cnblogs.com/just-for-you/p/15527781.html