ATA(代码)

  1. 编码转换:GBK码转UCS2码    和 UCS2码转GBK码(第一次用类来写,封装得很糟糕)
  2. #include <string.h>
    #include <iostream.h>

    #define N 100
    class coding
    {
    public:
        coding()
        {
           
        }
        ~coding()
        {

        }
        void Initunstr(char *string)
        {
           
            unstr=string;
            length=strlen(unstr);
        }
        void Initstr(char *string)
        {
            str=string;
            length=strlen(string);
        }
        void UCS2_GBK()
        {
            if(length == 0)
                exit(1);
            char buf[N];
            ZeroMemory(buf,N);        
            int i,len;
            //高低字节交换位置
            for(i = 0; i < length-1; i += 2)
            {
                buf[i+1]=unstr[i];
                buf[i]=unstr[i+1];
            }
            len = WideCharToMultiByte(CP_ACP, 0L, (unsigned short *)&buf[0], -1, unstr, 0, NULL, NULL);  
            str=(char *)malloc(len*sizeof(char)+1);
            WideCharToMultiByte(CP_ACP, 0L, (unsigned short *)&buf[0], -1, str, len, NULL, NULL);       

        }
        void GBK_UCS2()
        {
            if(!length)
                exit(1);
            char buf[N],*buftemp;
            ZeroMemory(buf,N);
            int i, len;
            len=MultiByteToWideChar(CP_ACP,0L,str,-1, (unsigned short *)&buf[0], 0);
            MultiByteToWideChar(CP_ACP,0L,str,-1, (unsigned short *)&buf[0], len);
            unstr=(char *)malloc(2*len*sizeof(char));
            buftemp=(char *)malloc(2*len*sizeof(char));
           
            len--;
            for(i=0;i < (len*2); i += 2)
            {
                buftemp[i]=buf[i+1];
                buftemp[i+1]=buf[i];
            }
            for(i=0;i< 2*len;i++)

                unstr[i]=buftemp[i];
            unstr[i]='/0';

           
        }
        char * getstr()
        {
            return str;
        }
        char* getunstr()
        {
            return unstr;
        }
    private:
       
        char *str;
        char *unstr;
        int length;
    };   

    /*int main()
    {
        coding code;
        char *string=new char(N);
        cin>>string;
        code.Initunstr(string);
        code.UCS2_GBK();
    //    code.printstr();
    //    code.Initstr("慢");
    //    code.GBK_UCS2();
        string=code.getstr();
        cout<<string<<endl;
        code.Initstr(string);
        code.GBK_UCS2();
        cout<<code.getunstr()<<endl;
        return 0;
    }*/
  3. MD5算法加密  核心是网上搜来的,里面涉及到很多宏定义,本想拆成const,但是这个编译时还有类型检查,很难实现,于是就放一块了,做成了.hpp文件,直接调用函数就好
  4. /*我做的修改就是接口的更改!**/
    /*让它接受已个字符串然后将该字符串加密处理的信息以字符串形式输出*/
    /*设计思想是通过中间文件进行转换,先将字符串写入文件,再让代码处理文件加密,再将加密信息读入文件,再将信息从文件中读出*/
    /*这个是HPP文件,也就是算法的实现过程,test是个测试函数*/
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <assert.h>

    #define F(x, y, z) (((x) & (y)) | ((~x) & (z)))
    #define G(x, y, z) (((x) & (z)) | ((y) & (~z)))
    #define H(x, y, z) ((x) ^ (y) ^ (z))
    #define I(x, y, z) ((y) ^ ((x) | (~z)))

    #define RL(x, y) (((x) << (y)) | ((x) >> (32 - (y))))  //x向左循环移y位

    #define PP(x) (x<<24)|((x<<8)&0xff0000)|((x>>8)&0xff00)|(x>>24)  //将x高低位互换,例如PP(aabbccdd)=ddccbbaa

    #define FF(a, b, c, d, x, s, ac) a = b + (RL((a + F(b,c,d) + x + ac),s))
    #define GG(a, b, c, d, x, s, ac) a = b + (RL((a + G(b,c,d) + x + ac),s))
    #define HH(a, b, c, d, x, s, ac) a = b + (RL((a + H(b,c,d) + x + ac),s))
    #define II(a, b, c, d, x, s, ac) a = b + (RL((a + I(b,c,d) + x + ac),s))

    unsigned A,B,C,D,a,b,c,d,i,len,flen[2],x[16];   //i临时变量,len文件长,flen[2]为64位二进制表示的文件初始长度
    char FileName[]="temp.dat";   //文件名
    FILE *fp;
    void ChangeToFile(const char *s)
    {
        fp=fopen(FileName,"w+");
        if(fp==NULL)
        {
            printf("The temp file can't creat!/n");
            exit(0);
        }
        else
        {
            fprintf(fp,"%s",s);
            fclose(fp);
        }
    }

    //MD5核心算法,供64轮
    void exchange()
    {                

      a=A;b=B;c=C;d=D;
      /**//* Round 1 */
      FF (a, b, c, d, x[ 0],  7, 0xd76aa478); /**//* 1 */
      FF (d, a, b, c, x[ 1], 12, 0xe8c7b756); /**//* 2 */
      FF (c, d, a, b, x[ 2], 17, 0x242070db); /**//* 3 */
      FF (b, c, d, a, x[ 3], 22, 0xc1bdceee); /**//* 4 */
      FF (a, b, c, d, x[ 4],  7, 0xf57c0faf); /**//* 5 */
      FF (d, a, b, c, x[ 5], 12, 0x4787c62a); /**//* 6 */
      FF (c, d, a, b, x[ 6], 17, 0xa8304613); /**//* 7 */
      FF (b, c, d, a, x[ 7], 22, 0xfd469501); /**//* 8 */
      FF (a, b, c, d, x[ 8],  7, 0x698098d8); /**//* 9 */
      FF (d, a, b, c, x[ 9], 12, 0x8b44f7af); /**//* 10 */
      FF (c, d, a, b, x[10], 17, 0xffff5bb1); /**//* 11 */
      FF (b, c, d, a, x[11], 22, 0x895cd7be); /**//* 12 */
      FF (a, b, c, d, x[12],  7, 0x6b901122); /**//* 13 */
      FF (d, a, b, c, x[13], 12, 0xfd987193); /**//* 14 */
      FF (c, d, a, b, x[14], 17, 0xa679438e); /**//* 15 */
      FF (b, c, d, a, x[15], 22, 0x49b40821); /**//* 16 */

     /**//* Round 2 */
      GG (a, b, c, d, x[ 1],  5, 0xf61e2562); /**//* 17 */
      GG (d, a, b, c, x[ 6],  9, 0xc040b340); /**//* 18 */
      GG (c, d, a, b, x[11], 14, 0x265e5a51); /**//* 19 */
      GG (b, c, d, a, x[ 0], 20, 0xe9b6c7aa); /**//* 20 */
      GG (a, b, c, d, x[ 5],  5, 0xd62f105d); /**//* 21 */
      GG (d, a, b, c, x[10],  9, 0x02441453); /**//* 22 */
      GG (c, d, a, b, x[15], 14, 0xd8a1e681); /**//* 23 */
      GG (b, c, d, a, x[ 4], 20, 0xe7d3fbc8); /**//* 24 */
      GG (a, b, c, d, x[ 9],  5, 0x21e1cde6); /**//* 25 */
      GG (d, a, b, c, x[14],  9, 0xc33707d6); /**//* 26 */
      GG (c, d, a, b, x[ 3], 14, 0xf4d50d87); /**//* 27 */
      GG (b, c, d, a, x[ 8], 20, 0x455a14ed); /**//* 28 */
      GG (a, b, c, d, x[13],  5, 0xa9e3e905); /**//* 29 */
      GG (d, a, b, c, x[ 2],  9, 0xfcefa3f8); /**//* 30 */
      GG (c, d, a, b, x[ 7], 14, 0x676f02d9); /**//* 31 */
      GG (b, c, d, a, x[12], 20, 0x8d2a4c8a); /**//* 32 */

      /**//* Round 3 */
      HH (a, b, c, d, x[ 5],  4, 0xfffa3942); /**//* 33 */
      HH (d, a, b, c, x[ 8], 11, 0x8771f681); /**//* 34 */
      HH (c, d, a, b, x[11], 16, 0x6d9d6122); /**//* 35 */
      HH (b, c, d, a, x[14], 23, 0xfde5380c); /**//* 36 */
      HH (a, b, c, d, x[ 1],  4, 0xa4beea44); /**//* 37 */
      HH (d, a, b, c, x[ 4], 11, 0x4bdecfa9); /**//* 38 */
      HH (c, d, a, b, x[ 7], 16, 0xf6bb4b60); /**//* 39 */
      HH (b, c, d, a, x[10], 23, 0xbebfbc70); /**//* 40 */
      HH (a, b, c, d, x[13],  4, 0x289b7ec6); /**//* 41 */
      HH (d, a, b, c, x[ 0], 11, 0xeaa127fa); /**//* 42 */
      HH (c, d, a, b, x[ 3], 16, 0xd4ef3085); /**//* 43 */
      HH (b, c, d, a, x[ 6], 23, 0x04881d05); /**//* 44 */
      HH (a, b, c, d, x[ 9],  4, 0xd9d4d039); /**//* 45 */
      HH (d, a, b, c, x[12], 11, 0xe6db99e5); /**//* 46 */
      HH (c, d, a, b, x[15], 16, 0x1fa27cf8); /**//* 47 */
      HH (b, c, d, a, x[ 2], 23, 0xc4ac5665); /**//* 48 */

      /**//* Round 4 */
      II (a, b, c, d, x[ 0],  6, 0xf4292244); /**//* 49 */
      II (d, a, b, c, x[ 7], 10, 0x432aff97); /**//* 50 */
      II (c, d, a, b, x[14], 15, 0xab9423a7); /**//* 51 */
      II (b, c, d, a, x[ 5], 21, 0xfc93a039); /**//* 52 */
      II (a, b, c, d, x[12],  6, 0x655b59c3); /**//* 53 */
      II (d, a, b, c, x[ 3], 10, 0x8f0ccc92); /**//* 54 */
      II (c, d, a, b, x[10], 15, 0xffeff47d); /**//* 55 */
      II (b, c, d, a, x[ 1], 21, 0x85845dd1); /**//* 56 */
      II (a, b, c, d, x[ 8],  6, 0x6fa87e4f); /**//* 57 */
      II (d, a, b, c, x[15], 10, 0xfe2ce6e0); /**//* 58 */
      II (c, d, a, b, x[ 6], 15, 0xa3014314); /**//* 59 */
      II (b, c, d, a, x[13], 21, 0x4e0811a1); /**//* 60 */
      II (a, b, c, d, x[ 4],  6, 0xf7537e82); /**//* 61 */
      II (d, a, b, c, x[11], 10, 0xbd3af235); /**//* 62 */
      II (c, d, a, b, x[ 2], 15, 0x2ad7d2bb); /**//* 63 */
      II (b, c, d, a, x[ 9], 21, 0xeb86d391); /**//* 64 */

      A += a;
      B += b;
      C += c;
      D += d;

    }

    void md5(char strDest[33], const char *strSour)
    {
        assert( (strDest!=NULL) && (strSour != NULL));
        int i;
        ChangeToFile(strSour);
        fp=fopen(FileName,"rb");
        if(fp == NULL)
        {
            printf("can't open the temp file!/n");
            exit(0);
        }
        fseek(fp, 0, SEEK_END);  //文件指针转到文件末尾
        if((len=ftell(fp))==-1)
        {
            printf("Sorry! Can not calculate files which larger than 2 GB!/n");
            fclose(fp);
            exit(0);
        }  //ftell函数返回long,最大为2GB,超出返回-1
        rewind(fp);  //文件指针复位到文件头
        A=0x67452301,B=0xefcdab89,C=0x98badcfe,D=0x10325476; //初始化链接变量
        flen[1]=len/0x20000000;     //flen单位是bit
        flen[0]=(len%0x20000000)*8;
        memset(x,0,64);   //初始化x数组为0
        fread(&x,4,16,fp);  //以4字节为一组,读取16组数据
        for(i=0;i<len/64;i++)
        {    //循环运算直至文件结束
          exchange();
          memset(x,0,64);
          fread(&x,4,16,fp);
        }
        ((char*)x)[len%64]=128;  //文件结束补1,补0操作,128二进制即10000000
        if(len%64>55)
        {
            exchange();
            memset(x,0,64);
        }
        memcpy(x+14,flen,8);    //文件末尾加入原文件的bit长度
        exchange();
        fclose(fp);
        fp=fopen(FileName,"wr");
        fprintf(fp,"%08x",PP(A));
        fprintf(fp,"%08x",PP(B));
        fprintf(fp,"%08x",PP(C));
        fprintf(fp,"%08x",PP(D));
        fclose(fp);
        fp=fopen(FileName,"r");

        for(i=0;i<32;i++)
            strDest[i]=fgetc(fp);       
       
        strDest[i]='/0';
        fclose(fp);

       
    }
  5. 协议:不是按要求做的,只能说是个人力的浪费,就不说了
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值