编写函数完成字符串的加密与解密 c语言 (加密字符串C语言华为机试)

2023-03-12 0:45:48 密语知识 思思

C语言代码和运行结果如下:

输出符合示例,加解密均正确,望采纳~

附源码链接:字符串加解密

C语言 字符串加密

#includestdio.h

#includestdlib.h

#includestring.h

int main(void)

{

    char c[100];

    int  k;

    int  len,i,temp;

    scanf("%s",c);

    scanf("%d",k);

    len = (int)strlen(c);

    k = k%26;

    for(i=0;ilen;i++)

    {

        if (c[i] = 'a'  c[i] = 'z')

        {

            if(c[i]+k  'z')

            {

                temp = 'z'-c[i];

                temp = k - temp - 1;

                c[i]='a'+temp;

            }

            else

            {

                c[i]+=k;

            }

        }

        else if (c[i] = 'A'  c[i] = 'Z')

        {

            if(c[i]+k  'Z')

            {

                temp = 'Z'-c[i];

                temp = k - temp - 1;

                c[i]='A'+temp;

            }

            else

            {

                c[i]+=k;

            }

        }

        else

        {

            /* do nothing */

        }

    }

    printf("%s\n",c);

    return 0;

}

C语言字符串加密

问题不小,你表面用的是C

但是,好多地方不符合C的语法

,,比如:

for

(int

i=0;

str[i]

!=

'\0';

i++)

还有,就是你好像没有弄清楚

,你要做什么似的,有好多无用的东西,

就像你的函数里的,key

,虽然你提到key了,但是你根本没有使用key,你只是使用45来进行加密,,还有就是一个文件

的大小,是不确定的,你用一个100个字符的字符串来存,有点那个不安全了,,如果稍长一点就会出问题,产生运行时错误。其实你这个加密和解密是一个可逆过程,用一个函数,就可以了,具体你想要的也不是太明白,就给你弄了一个简单一点加密和解密程序

,输入输出不是同一个文件

,不知道是不是你想要的。

#include

#include

#include

void

Decrypt()

{

char

fname[FILENAME_MAX];

char

fname2[FILENAME_MAX];

FILE*

fp;

FILE*

fp1;

int

key;

char

c;

printf("输入要加/解密文件的路径:\n");

scanf("%s",

fname);

printf("请输入密钥:\n");

scanf("%d",key);

strcpy(fname2,fname);

strcat(fname2,".txt");

if(

(fp

=

fopen(fname,"r+"))

==

NULL)

{

printf("error");

exit(1);

}

if(

(fp1

=

fopen(fname2,"w+"))

==

NULL)

{

printf("error");

exit(1);

}

while(

(c

=

fgetc(fp))

!=

EOF)

{

c

=

c^key;

fputc(c,fp1);

}

fcloseall();

}

int

main()

{

Decrypt();

return

0;

}

如果想看一些好一点的加密算法

,我这里有一些,联系我发给你

,,

C语言怎么加密字符

我没注意只要小写,我写的是大小写都可以的,另外附送输入验证。

#include stdio.h

#include string.h

int main()

{

    char str[]="00000",str2[]="00000",*p=str,*p2=str2;

    printf("输入5个字母:");

    while(*p!=0)

    {

        scanf("%c",p);

        if(*p=='\n')

            continue;

        if(*p'A'||(*p'Z'*p'a') || *p'z') //输入验证,必须是字母

        {

            printf("只能输入字母,请重新输入\n");

            p=str;

            p2=str2;

            fflush(stdin);//输入有错重新输入前清空缓冲区。fflush属于c扩展函数,正常使用没问题,如需在linux ggc上使用,考虑多次调用getchar函数来清空

        }

        else

        {

            *p2=(*p)+4;

            if(*p290  *p297)   //大写字母加4,最大位不超出

                *p2='A'+(*p2-90)-1;

            if(*p2122)            //小写字母加4,最大位不超出

                *p2='a'+(*p2-122)-1;

            p2++;

            p++;

        }

    }

    printf("原字符串为:%s\n加密后的字符串为:%s\n",str,str2);

    return 0;

}