数据加密:
    算法1:(不可逆)
    将ASCII表中32~~126中的字符,加密后,显示为128~~255的字符.
    128~~255的字符会让人看起来头痛些。。。。。。安全.

    当ch[?]的值为偶数时:ch[?]=255-ch[?]的个位*10-ch[?]的十位

    当ch[?]的值为奇数时: ch[?]=128+ch[?]的个位*10+ch[?]的十位

    当ch[?]的值为质数时:ch[?]=128+ch[?]的个位+ch[?]的十位

    算法2:(可逆)
    当ch[?]的值能被3整除时:ch[?]-=2,否则ch[?]-=3;
*****************************/
#include<stdio.h>
void main()
{
    char ch[100];
    int flag[100]={0};//flag[i]为1时表示加密过程为+2,为2时表示为+2越界,为3时表示+3越界
    int i,j,m;//循环变量,i表示输入字符的个数
    char PsWay;//表示加密方式
    char yesorno;//表示是否继续使用
    printf("\n本代码由(http://hi.baidu.com/dazhufeng)大竹峰-师从田不易提供\n\n");
    printf("*************选择加密算法*************\n");
    printf("1.不可逆,加密后为乱码.\n\n");
    printf("2.可逆,密码为0~9,a~z或A~Z(密码只取前8位).\n\n");
    do
    {
        fflush(stdin);
        do
        {
            printf("请选择(1|2):");
            scanf("%c",&PsWay);
            if (PsWay!='1' && PsWay!='2')
            {
                printf("请输入1或2选择加密方法!\n");
            }
        }while(PsWay!='1' && PsWay!='2');

        printf("请输入密码:");
        fflush(stdin);
        for(i=0;;i++)//数据输入
        {
            ch[i]=getchar();
            if (ch[i]=='\n')
                break;
               
        }
        fflush(stdin);
        if (PsWay=='1')//第一种----不可逆算法
        {
            for(j=0;j<i;j++)//加密过程
            {
                if(ch[j]%2==0)//偶数
                {
                    if (ch[j]<100)
                    {
                        ch[j]=255-(ch[j]%10)*10-ch[j]/10;
                    }
                    else
                    {
                        ch[j]=255-(ch[j]%100)*10-(ch[j]/10)%10;
                    }
                }
                else//奇数
                {
                    if (ch[j]<100)
                    {
                        ch[j]=128+(ch[j]%10)*10+ch[j]/10;
                    }
                    else
                    {
                        ch[j]=128+(ch[j]%100)*10+(ch[j]/10)%10;
                    }
                }

                for(m=2;m<ch[j];m++)//素数
                {
                    if(ch[i]%m==0)
                    {
                        if (ch[j]<100)
                        {
                            ch[j]=128+(ch[j]%10)+ch[j]/10;
                        }
                        else
                        {
                            ch[j]=128+(ch[j]%100)+(ch[j]/10)%10;
                        }
                        break;
                    }
                }

            }
        }
        else//第二种---可逆的算法
        {
            //printf("\nA:%d\tS:%d\tD:%d\tF:%d\tA:%d\tS:%d\n",'A','S','D','F','A','S');
            for(j=0;j<i;j++)
            {   
                if (ch[j]>=97)
                {
                    if (ch[j]%3==0)
                    {
                        ch[j]=ch[j]+2;
                        if (ch[j]>122)
                        {
                            ch[j]=ch[j]-26;
                            flag[j]=2;
                        }
                        else
                            flag[j]=1;
                    }
                    else
                    {
                        ch[j]=ch[j]+3;
                        if (ch[j]>122)
                        {
                        ch[j]=ch[j]-26;
                        flag[j]=3;
                        }
                    }
                   
                }
                else if(ch[j]>=65)
                {
                    if (ch[j]%3==0)
                    {
                        ch[j]=ch[j]+2;
                        if (ch[j]>90)
                        {
                            ch[j]=ch[j]-26;
                            flag[j]=2;
                        }
                        else
                            flag[j]=1;

                    }
                    else
                    {
                        ch[j]=ch[j]+3;
                        if (ch[j]>90)
                        {
                        ch[j]=ch[j]-26;
                        flag[j]=3;
                        }
                    }
                }
                else if(ch[j]>=48)
                {
                    if (ch[j]%3==0)
                    {
                        ch[j]=ch[j]+2;
                        if (ch[j]>57)
                        {
                            ch[j]=ch[j]-10;
                            flag[j]=2;
                        }
                        else
                            flag[j]=1;
                    }
                    else
                    {
                        ch[j]=ch[j]+3;
                        if (ch[j]>57)
                        {
                            ch[j]=ch[j]-10;
                            flag[j]=3;
                        }
                    }
                }
            }
        }


        printf("加密后的数据为:\n");
        for(j=0;j<i;j++)//将加密后的数据输出
        {
            printf("%c",ch[j]);
        }
        printf("\n");
       
        if(PsWay=='2')//输出原始信息
        {
            for(j=0;j<i;j++)
            {
                if(flag[j]==0)
                {
                    ch[j]-=3;
                }
                else if(flag[j]==1)
                {
                    ch[j]-=2;
                }
                else
                {
                    if (ch[j]>=65)
                        ch[j]=ch[j]+26-flag[j];
                    else
                        ch[j]=ch[j]+10-flag[j];
                }
            }

            for(j=0;j<i;j++)
            {
                printf("%c",ch[j]);
            }
            printf("\n");

        }

        printf("输出完毕... ...\n");
        printf("是否继续(Y/N):");
        scanf("%c",&yesorno);
    }while(yesorno=='y' || yesorno=='Y');
    printf("\n欢迎使用,再见!\n");
    getchar();
    getchar();

}
posted on 2009-05-07 22:55  yxbsmx  阅读(1213)  评论(0编辑  收藏  举报