C语言字符串加密和解密算法

在本实例中要求设计一个加密和解密算法。在对一个指定的字符串加密之后,利用解密函数能够对密文解密,显示明文信息。加密的方式是将字符串中每个字符加上它在字符串中的位置和一个偏移值 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]={'\0'};
    char cryptograph[128]={'\0'};
    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]='\0';
            printf("加密后的密文是:%s\n",cryptograph);
        }
        else if(result==2)
        {
            count=strlen(Text);
            for(i=0;i<count;i++)
            {
                Text[i]=cryptograph[i]-i-5;
            }
            Text[i]='\0';
            printf("解密后的明文是:%s\n",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 略微复杂,是为了确保信息传输完整、一致而设计的杂凑算法之一,是杂凑算法的基本原理。