天气与日历 切换到窄版

 找回密码
 立即注册
中国膜结构网
十大进口膜材评选 十大国产膜材评选 十大膜结构设计评选 十大膜结构公司评选
查看: 11|回复: 0

简单的字符串加密

[复制链接]
  • TA的每日心情
    开心
    昨天 15:23
  • 签到天数: 69 天

    [LV.6]常住居民II

    410

    主题

    167

    回帖

    2704

    积分

    管理员

    积分
    2704
    发表于 2024-6-22 09:46:18 | 显示全部楼层 |阅读模式
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    //函数encode()将字母顺序推后n位,实现文件加密功能
    void encode(char str[],int n){
        char c;
        int i;
        for(i=0;i<strlen(str);++i){  //遍历字符串
            c=str[i];
            if(c>='a' && c<='z'){  //c是小写字母
                if(c+n%26<='z'){  //若加密后不超出小写字母范围
                    str[i]=(char)(c+n%26);  //加密函数
                }else{  //加密后超出小写字母范围,从头开始循环小写字母
                    str[i]=(char)(c+n%26-26);
                }
            }else if(c>='A' && c<='Z'){ //c为大写字母
                if(c + n%26 <= 'Z'){  //加密后不超出大写字母范围
                    str[i]=(char)(c+n%26);
                }else{  //加密后超出大写字母范围,从头开始循环大写字母
                    str[i]=(char)(c+n%26-26);
                }
            }else{  //不是字母,不加密
                str[i]=c;
            }
        }
        printf("\nAfter encode: \n");
        puts(str);  //输出加密后的字符串
    }
    //decode()实现解密功能,将字母顺序前移n位
    void decode(char str[],int n){
        char c;
        int i;
        //遍历字符串
        for(i=0;i<strlen(str);++i){
            c=str[i];
            //c为小写字母
            if(c>='a' && c<='z'){
                //解密后还为小写字母,直接解密
                if(c-n%26>='a'){
                    str[i]=(char)(c-n%26);
                }else{
                    //解密后不为小写字母了,通过循环小写字母处理为小写字母
                    str[i]=(char)(c-n%26+26);
                }
            }else if(c >= 'A' && c<='Z'){  //c为大写字母
                if(c-n%26>='A'){  //解密后还为大写字母
                    str[i]=(char)(c-n%26);
                }else{  //解密后不为大写字母了,循环大写字母,处理为大写字母
                    str[i]=(char)(c-n%26+26);
                }
            }else{  //非字母不处理
                str[i]=c;
            }
        }
        printf("\nAfter decode: \n");
        puts(str);  //输出解密后的字符串
    }//该函数代码有冗余,读者可改进
    int main()
    {
        char str[50];
        int k=0,n=0,i=1;
        printf("\nPlease input strings: ");
        scanf("%s",str);  //输入加密解密字符串
        //打印菜单
        printf("-----------------\n");
        printf("1: Encryption\n");
        printf("2: Decryption\n");
        printf("3: Violent Crack\n");  //暴力破解
        printf("-----------------\n");
        printf("\nPlease choose: ");
        scanf("%d",&k);
        if(k==1){  //加密
            printf("\nPlease input number: ");
            scanf("%d",&n);
            encode(str,n);//输入加密密钥
        }else if(k==2){  //解密
            printf("\nPlease input number: ");
            scanf("%d",&n);
            decode(str,n);//输入解密密钥(需与加密密钥相同)
        }else{
            for(i=1;i<=25;++i){  //尝试所有可能的n值进行暴力破解
                printf("%d ",i);
                decode(str,i);
            }
        }
        return 0;
    }

     

     

     

     

    简单的字符串加密
    中国膜结构网打造全中国最好的膜结构综合平台 ,统一协调膜结构设计,膜结构施工,膜材采购,膜材定制,膜结构预算全方位服务。 中国空间膜结构协会合作单位。
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|Archiver|手机版|中国膜结构网|中国膜结构协会|进口膜材|国产膜材|ETFE|PVDF|PTFE|设计|施工|安装|车棚|看台|污水池|

    GMT+8, 2024-7-1 05:42 , Processed in 0.059155 second(s), 22 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

    快速回复 返回顶部 返回列表