首页 > 编程笔记 > C语言笔记 阅读:13

C语言字符串加密和解密(附带实例)

设计 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) /*如果用户输入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) /*如果用户输入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) /*如果用户输入3,退出系统*/
        {
            break; /*跳出循环*/
        }
        else
        {
            printf("请输入命令符:\n"); /*输出提示信息*/
        }
        printf("输入1加密新的明文,输入2对刚加密的密文进行解密,输入3退出系统:\n");
        printf("请输入命令符:\n"); /*输出提示信息,提示用户输入指令*/
        scanf("%d", &result); /*获取输入的命令字符*/
    }
    return 0; /*程序结束*/
}
运行程序,字符串的加密和解密效果为:
请输入要加密的明文:
cyuyanzhongwenwang
加密后的密文是:h|乯x卼||v噕€妘儅
输入1加密新的明文,输入2对刚加密的密文进行解密,输入3退出系统:
请输入命令符:
2
解密后的明文是:cyuyanzhongwenwang
输入1加密新的明文,输入2对刚加密的密文进行解密,输入3退出系统:
请输入命令符:
3

相关文章