在以前,為了防止信息被竊取,人們使用凱撒密碼來進行加密(咋感覺說得這么官方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;
}