其他分享
首页 > 其他分享> > 凯撒密码(c语言)

凯撒密码(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