C語言字串加密和解密演算法

2020-07-16 10:04:28
在本範例中要求設計一個加密和解密演算法。在對一個指定的字串加密之後,利用解密函數能夠對密文解密,顯示明文資訊。加密的方式是將字串中每個字元加上它在字串中的位置和一個偏移值 5。以字串“mrsoft”為例,第一個字元“m”在字串中的位置為 0,那麼它對應的密文是“'m'+0+5",即 r。

演算法思想

在 main() 函數中使用 while 語句設計一個無限迴圈,並定義兩個字元陣列,用來儲存,明文和密文字串,在首次迴圈中要求使用者輸入字串,進行將明文加密成密文的操作, 之後的操作則是根據使用者輸入的命令字元進行判斷,輸入 1 加密新的明文,輸入 2 對剛加密的密文進行解密,輸入 3 退出系統。

程式程式碼

#include <stdio.h>
#include <string.h>
int main()
{
    int result=1;
    int i;
    int count=0;
    char Text[128]={''};
    char cryptograph[128]={''};
    while(1)
    {
        if(result==1)
        {
            printf("請輸入要加密的明文:n");
            scanf ("%s",&Text);
            count=strlen(Text);
            for(i=0;i<count;i++)
            {
                cryptograph[i]=Text[i]+i+5;
            }
            cryptograph[i]='';
            printf("加密後的密文是:%sn",cryptograph);
        }
        else if(result==2)
        {
            count=strlen(Text);
            for(i=0;i<count;i++)
            {
                Text[i]=cryptograph[i]-i-5;
            }
            Text[i]='';
            printf("解密後的明文是:%sn",Text);
        }
        else if(result==3)
        {
            break;
        }
        else
        {
            printf("請輸入正確的命令符:n");
        }
        printf("輸入1加密新的明文,輸入2對剛加密的密文進行解密,輸入3退出系統:n");
        printf("請輸入命令符:n");
        scanf("%d",&result);
    }
    return 0;
}

偵錯執行結果

本範例中,輸入了 I love Xichang College 字串作為例證,因此輸出是多個加密後的字串,結果如下所示:

請輸入要加密的明文:
I Love Xichang College
加密後的密文是:N
輸入1加密新的明文,輸入2對剛加密的密文進行解密,輸入3退出系統:
請輸入命令符:
請輸入要加密的明文:
加密後的密文是:Qu}m
輸入1加密新的明文,輸入2對剛加密的密文進行解密,輸入3退出系統:
請輸入命令符:
請輸入要加密的明文:
加密後的密文是:]ojpjxr
輸入1加密新的明文,輸入2對剛加密的密文進行解密,輸入3退出系統:
請輸入命令符:
請輸入要加密的明文:
加密後的密文是:Hustnqp
輸入1加密新的明文,輸入2對剛加密的密文進行解密,輸入3退出系統:
請輸入命令符:

總結

字串的加密和解密方法一直被廣泛應用,最常見的無非是 MD5 雜湊函數。本範例中的演算法比較簡單,只是在原值基礎上相加對應值即可。MD5 略微複雜,是為了確保資訊傳輸完整、一致而設計的雜湊演算法之一,是雜湊演算法的基本原理。