亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? rijndael.cpp

?? DES加密解密的算法
?? CPP
字號:
/* Rijndael Block Cipher - rijndael.c

   Written by Mike Scott 21st April 1999
   mike@compapp.dcu.ie
   An alternative faster version is implemented in MIRACL 
   ftp://ftp.compapp.dcu.ie/pub/crypto/miracl.zip

   Copyright (c) 1999 Mike Scott

   Simply compile and run, e.g.

   cl /O2 rijndael.c                (Microsoft C)
   bcc32 /O2 rijndael.c             (Borland C)
   gcc -O2 rijndael.c -o rijndael   (Gnu C)

   Compiles and runs fine as a C++ program also.

   See rijndael documentation. The code follows the documentation as closely
   as possible, and where possible uses the same function and variable names.

   Permission for free direct or derivative use is granted subject 
   to compliance with any conditions that the originators of the 
   algorithm place on its exploitation.  

   Inspiration from Brian Gladman's implementation is acknowledged.

   Written for clarity, rather than speed.
   Assumes long is 32 bit quantity.
   Full implementation. 
   Endian indifferent.
*/

#define BYTE unsigned char       /* 8 bits  */
#define WORD unsigned long       /* 32 bits */

/* rotates x one bit to the left */

#define ROTL(x) (((x)>>7)|((x)<<1))

/* Rotates 32-bit word left by 1, 2 or 3 byte  */

#define ROTL8(x) (((x)<<8)|((x)>>24))
#define ROTL16(x) (((x)<<16)|((x)>>16))
#define ROTL24(x) (((x)<<24)|((x)>>8))

/* Fixed Data */

static BYTE InCo[4]={0xB,0xD,0x9,0xE};  /* Inverse Coefficients */

static BYTE fbsub[256];
static BYTE rbsub[256];
static BYTE ptab[256],ltab[256];
static WORD ftable[256];
static WORD rtable[256];
static WORD rco[30];

/* Parameter-dependent data */

int Nk,Nb,Nr;
BYTE fi[24],ri[24];
WORD fkey[120];
WORD rkey[120];

static WORD pack(BYTE *b)
{ /* pack bytes into a 32-bit Word */
    return ((WORD)b[3]<<24)|((WORD)b[2]<<16)|((WORD)b[1]<<8)|(WORD)b[0];
}

static void unpack(WORD a,BYTE *b)
{ /* unpack bytes from a word */
    b[0]=(BYTE)a;
    b[1]=(BYTE)(a>>8);
    b[2]=(BYTE)(a>>16);
    b[3]=(BYTE)(a>>24);
}

static BYTE xtime(BYTE a)
{
    BYTE b;
    if (a&0x80) b=0x1B;
    else        b=0;
    a<<=1;
    a^=b;
    return a;
}

static BYTE bmul(BYTE x,BYTE y)
{ /* x.y= AntiLog(Log(x) + Log(y)) */
    if (x && y) return ptab[(ltab[x]+ltab[y])%255];
    else return 0;
}

static WORD SubByte(WORD a)
{
    BYTE b[4];
    unpack(a,b);
    b[0]=fbsub[b[0]];
    b[1]=fbsub[b[1]];
    b[2]=fbsub[b[2]];
    b[3]=fbsub[b[3]];
    return pack(b);    
}

static BYTE product(WORD x,WORD y)
{ /* dot product of two 4-byte arrays */
    BYTE xb[4],yb[4];
    unpack(x,xb);
    unpack(y,yb); 
    return bmul(xb[0],yb[0])^bmul(xb[1],yb[1])^bmul(xb[2],yb[2])^bmul(xb[3],yb[3]);
}

static WORD InvMixCol(WORD x)
{ /* matrix Multiplication */
    WORD y,m;
    BYTE b[4];

    m=pack(InCo);
    b[3]=product(m,x);
    m=ROTL24(m);
    b[2]=product(m,x);
    m=ROTL24(m);
    b[1]=product(m,x);
    m=ROTL24(m);
    b[0]=product(m,x);
    y=pack(b);
    return y;
}

BYTE ByteSub(BYTE x)
{
    BYTE y=ptab[255-ltab[x]];  /* multiplicative inverse */
    x=y;  x=ROTL(x);
    y^=x; x=ROTL(x);
    y^=x; x=ROTL(x);
    y^=x; x=ROTL(x);
    y^=x; y^=0x63;
    return y;
}

void gentables(void)
{ /* generate tables */
    int i;
    BYTE y,b[4];

  /* use 3 as primitive root to generate power and log tables */

    ltab[0]=0;
    ptab[0]=1;  ltab[1]=0;
    ptab[1]=3;  ltab[3]=1; 
    for (i=2;i<256;i++)
    {
        ptab[i]=ptab[i-1]^xtime(ptab[i-1]);
        ltab[ptab[i]]=i;
    }
    
  /* affine transformation:- each bit is xored with itself shifted one bit */

    fbsub[0]=0x63;
    rbsub[0x63]=0;
    for (i=1;i<256;i++)
    {
        y=ByteSub((BYTE)i);
        fbsub[i]=y; rbsub[y]=i;
    }

    for (i=0,y=1;i<30;i++)
    {
        rco[i]=y;
        y=xtime(y);
    }

  /* calculate forward and reverse tables */
    for (i=0;i<256;i++)
    {
        y=fbsub[i];
        b[3]=y^xtime(y); b[2]=y;
        b[1]=y;          b[0]=xtime(y);
        ftable[i]=pack(b);

        y=rbsub[i];
        b[3]=bmul(InCo[0],y); b[2]=bmul(InCo[1],y);
        b[1]=bmul(InCo[2],y); b[0]=bmul(InCo[3],y);
        rtable[i]=pack(b);
    }
}

void gkey(int nb,int nk,char *key)
{ /* blocksize=32*nb bits. Key=32*nk bits */
  /* currently nb,bk = 4, 6 or 8          */
  /* key comes as 4*Nk bytes              */
  /* Key Scheduler. Create expanded encryption key */
    int i,j,k,m,N;
    int C1,C2,C3;
    WORD CipherKey[8];
    
    Nb=nb; Nk=nk;

  /* Nr is number of rounds */
    if (Nb>=Nk) Nr=6+Nb;
    else        Nr=6+Nk;

    C1=1;
    if (Nb<8) { C2=2; C3=3; }
    else      { C2=3; C3=4; }

  /* pre-calculate forward and reverse increments */
    for (m=j=0;j<nb;j++,m+=3)
    {
        fi[m]=(j+C1)%nb;
        fi[m+1]=(j+C2)%nb;
        fi[m+2]=(j+C3)%nb;
        ri[m]=(nb+j-C1)%nb;
        ri[m+1]=(nb+j-C2)%nb;
        ri[m+2]=(nb+j-C3)%nb;
    }

    N=Nb*(Nr+1);
    
    for (i=j=0;i<Nk;i++,j+=4)
    {
        CipherKey[i]=pack((BYTE *)&key[j]);
    }
    for (i=0;i<Nk;i++) fkey[i]=CipherKey[i];
    for (j=Nk,k=0;j<N;j+=Nk,k++)
    {
        fkey[j]=fkey[j-Nk]^SubByte(ROTL24(fkey[j-1]))^rco[k];
        if (Nk<=6)
        {
            for (i=1;i<Nk && (i+j)<N;i++)
                fkey[i+j]=fkey[i+j-Nk]^fkey[i+j-1];
        }
        else
        {
            for (i=1;i<4 &&(i+j)<N;i++)
                fkey[i+j]=fkey[i+j-Nk]^fkey[i+j-1];
            if ((j+4)<N) fkey[j+4]=fkey[j+4-Nk]^SubByte(fkey[j+3]);
            for (i=5;i<Nk && (i+j)<N;i++)
                fkey[i+j]=fkey[i+j-Nk]^fkey[i+j-1];
        }

    }

 /* now for the expanded decrypt key in reverse order */

    for (j=0;j<Nb;j++) rkey[j+N-Nb]=fkey[j]; 
    for (i=Nb;i<N-Nb;i+=Nb)
    {
        k=N-Nb-i;
        for (j=0;j<Nb;j++) rkey[k+j]=InvMixCol(fkey[i+j]);
    }
    for (j=N-Nb;j<N;j++) rkey[j-N+Nb]=fkey[j];
}


/* There is an obvious time/space trade-off possible here.     *
 * Instead of just one ftable[], I could have 4, the other     *
 * 3 pre-rotated to save the ROTL8, ROTL16 and ROTL24 overhead */ 

void encrypt(char *buff)
{
    int i,j,k,m;
    WORD a[8],b[8],*x,*y,*t;

    for (i=j=0;i<Nb;i++,j+=4)
    {
        a[i]=pack((BYTE *)&buff[j]);
        a[i]^=fkey[i];
    }
    k=Nb;
    x=a; y=b;

/* State alternates between a and b */
    for (i=1;i<Nr;i++)
    { /* Nr is number of rounds. May be odd. */

/* if Nb is fixed - unroll this next 
   loop and hard-code in the values of fi[]  */

        for (m=j=0;j<Nb;j++,m+=3)
        { /* deal with each 32-bit element of the State */
          /* This is the time-critical bit */
            y[j]=fkey[k++]^ftable[(BYTE)x[j]]^
                 ROTL8(ftable[(BYTE)(x[fi[m]]>>8)])^
                 ROTL16(ftable[(BYTE)(x[fi[m+1]]>>16)])^
                 ROTL24(ftable[x[fi[m+2]]>>24]);
        }
        t=x; x=y; y=t;      /* swap pointers */
    }

/* Last Round - unroll if possible */ 
    for (m=j=0;j<Nb;j++,m+=3)
    {
        y[j]=fkey[k++]^(WORD)fbsub[(BYTE)x[j]]^
             ROTL8((WORD)fbsub[(BYTE)(x[fi[m]]>>8)])^
             ROTL16((WORD)fbsub[(BYTE)(x[fi[m+1]]>>16)])^
             ROTL24((WORD)fbsub[x[fi[m+2]]>>24]);
    }   
    for (i=j=0;i<Nb;i++,j+=4)
    {
        unpack(y[i],(BYTE *)&buff[j]);
        x[i]=y[i]=0;   /* clean up stack */
    }
    return;
}

void decrypt(char *buff)
{
    int i,j,k,m;
    WORD a[8],b[8],*x,*y,*t;

    for (i=j=0;i<Nb;i++,j+=4)
    {
        a[i]=pack((BYTE *)&buff[j]);
        a[i]^=rkey[i];
    }
    k=Nb;
    x=a; y=b;

/* State alternates between a and b */
    for (i=1;i<Nr;i++)
    { /* Nr is number of rounds. May be odd. */

/* if Nb is fixed - unroll this next 
   loop and hard-code in the values of ri[]  */

        for (m=j=0;j<Nb;j++,m+=3)
        { /* This is the time-critical bit */
            y[j]=rkey[k++]^rtable[(BYTE)x[j]]^
                 ROTL8(rtable[(BYTE)(x[ri[m]]>>8)])^
                 ROTL16(rtable[(BYTE)(x[ri[m+1]]>>16)])^
                 ROTL24(rtable[x[ri[m+2]]>>24]);
        }
        t=x; x=y; y=t;      /* swap pointers */
    }

/* Last Round - unroll if possible */ 
    for (m=j=0;j<Nb;j++,m+=3)
    {
        y[j]=rkey[k++]^(WORD)rbsub[(BYTE)x[j]]^
             ROTL8((WORD)rbsub[(BYTE)(x[ri[m]]>>8)])^
             ROTL16((WORD)rbsub[(BYTE)(x[ri[m+1]]>>16)])^
             ROTL24((WORD)rbsub[x[ri[m+2]]>>24]);
    }        
    for (i=j=0;i<Nb;i++,j+=4)
    {
        unpack(y[i],(BYTE *)&buff[j]);
        x[i]=y[i]=0;   /* clean up stack */
    }
    return;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲精品国产精华液| 久久9热精品视频| 蜜乳av一区二区| 丁香啪啪综合成人亚洲小说| 欧美亚洲日本一区| 国产色综合一区| 日韩电影网1区2区| 欧美色电影在线| 国产精品高潮呻吟| 国产精品中文字幕日韩精品| 欧洲色大大久久| **性色生活片久久毛片| 国内精品国产成人| 日韩一区二区在线观看视频播放| 亚洲三级电影网站| 成人综合在线观看| 久久精品夜色噜噜亚洲a∨| 亚洲国产人成综合网站| 91小视频免费观看| 国产精品免费久久| 国产精品一区在线观看乱码| 4438x成人网最大色成网站| 一区二区三区中文字幕精品精品 | 成人丝袜视频网| 欧美成人精品1314www| 亚洲成人av电影| 91国偷自产一区二区使用方法| 国产精品免费视频一区| 国产suv精品一区二区883| 久久色成人在线| 国内精品视频666| 久久久欧美精品sm网站| 国产综合色在线| 久久久久久麻豆| 成人黄动漫网站免费app| 久久夜色精品国产欧美乱极品| 麻豆国产一区二区| 337p粉嫩大胆噜噜噜噜噜91av| 蜜芽一区二区三区| 精品入口麻豆88视频| 国内成人自拍视频| 国产精品嫩草影院av蜜臀| 国产传媒日韩欧美成人| 中文在线一区二区| www.久久久久久久久| 中文字幕一区二区三区色视频 | 国产精品一区在线观看你懂的| 久久综合色天天久久综合图片| 久久99精品国产麻豆婷婷 | 激情五月激情综合网| 日韩精品一区二区三区在线观看| 精品一区二区影视| 国产精品国产三级国产有无不卡 | 成人污污视频在线观看| 亚洲欧洲性图库| 欧美午夜片在线看| 久草在线在线精品观看| 国产午夜精品一区二区三区视频| 成人精品鲁一区一区二区| 亚洲一区二区三区四区在线| 在线播放国产精品二区一二区四区| 美女性感视频久久| 国产精品人妖ts系列视频| 91女人视频在线观看| 图片区小说区国产精品视频| 精品日产卡一卡二卡麻豆| 91亚洲精品一区二区乱码| 午夜欧美电影在线观看| 26uuuu精品一区二区| 色综合久久久久综合体桃花网| 人禽交欧美网站| 国产精品免费丝袜| 91精品国产高清一区二区三区| 国产高清精品网站| 亚洲超碰精品一区二区| 久久久亚洲精品石原莉奈| 欧美视频一区在线观看| 风间由美一区二区三区在线观看| 一区二区在线观看视频| 亚洲精品在线三区| 欧美探花视频资源| 成人毛片视频在线观看| 日韩电影一区二区三区| 亚洲欧美福利一区二区| 精品国产免费视频| 欧美精品在线观看一区二区| www.66久久| 国产乱妇无码大片在线观看| 亚洲成人777| 亚洲色图在线看| 国产欧美一区二区精品性| 91麻豆精品国产无毒不卡在线观看| bt欧美亚洲午夜电影天堂| 久久99在线观看| 日韩激情av在线| 一区二区三区日韩精品视频| 国产欧美日韩视频一区二区| 日韩精品中文字幕一区 | 色综合视频在线观看| 国产综合久久久久影院| 日韩国产欧美在线视频| 亚洲电影在线免费观看| 亚洲欧美国产三级| 最新国产精品久久精品| 国产亚洲美州欧州综合国 | 5858s免费视频成人| 色哟哟在线观看一区二区三区| 国产精品亚洲综合一区在线观看| 日本中文字幕不卡| 婷婷开心激情综合| 亚洲国产精品人人做人人爽| 日韩伦理电影网| 亚洲人快播电影网| 激情综合色播五月| 六月丁香婷婷色狠狠久久| 成人免费视频在线观看| 精品日韩欧美在线| 欧美精品一区二区久久婷婷| 欧美一区二区在线观看| 欧美一个色资源| www久久久久| 国产丝袜欧美中文另类| 国产精品麻豆久久久| 亚洲日本在线看| 亚洲五码中文字幕| 视频在线观看一区二区三区| 日韩av网站在线观看| 美女脱光内衣内裤视频久久网站| 蜜臀久久99精品久久久久久9| 久久精品国产一区二区三| 加勒比av一区二区| 国产成人精品www牛牛影视| 高清beeg欧美| 91免费版在线| 在线不卡中文字幕| 久久天天做天天爱综合色| 国产精品欧美一级免费| 亚洲人妖av一区二区| 亚洲国产中文字幕在线视频综合| 日本不卡一区二区| 国产精品白丝jk白祙喷水网站| 国产乱子伦视频一区二区三区| 成人网页在线观看| 在线一区二区三区四区| 日韩手机在线导航| 欧美经典一区二区| 一区二区三区视频在线看| 日本怡春院一区二区| 国产成人8x视频一区二区| 色婷婷香蕉在线一区二区| 日韩欧美成人午夜| 亚洲情趣在线观看| 久久99久久久久| 91同城在线观看| 日韩精品一区二区三区swag| 亚洲天堂免费在线观看视频| 日本成人在线电影网| 9l国产精品久久久久麻豆| 91精品国产黑色紧身裤美女| 国产精品国产三级国产有无不卡| 日韩福利电影在线| 色综合色综合色综合| 久久青草国产手机看片福利盒子| 一区二区三区四区乱视频| 国产一区二区三区| 欧美电影在线免费观看| 国产精品国产三级国产a| 美女被吸乳得到大胸91| 欧美在线观看18| 亚洲欧美一区二区在线观看| 麻豆国产欧美日韩综合精品二区| 色哟哟在线观看一区二区三区| 久久久久久免费毛片精品| 丝袜美腿一区二区三区| 99麻豆久久久国产精品免费| 久久综合久久综合亚洲| 午夜精品久久久久影视| 99r精品视频| 国产精品少妇自拍| 国产98色在线|日韩| 欧美电影免费观看高清完整版在线观看 | 亚洲永久免费视频| 成人福利视频网站| 久久色中文字幕| 久久99在线观看| 日韩欧美色电影| 午夜婷婷国产麻豆精品| 日本大香伊一区二区三区| 国产女主播在线一区二区| 久久99精品国产麻豆婷婷| 欧美日韩一卡二卡| 亚洲成人自拍偷拍| 色88888久久久久久影院按摩| 日本一区二区成人在线| 九九**精品视频免费播放| 欧美一区二区黄| 免费美女久久99| 日韩一区二区三区在线视频| 图片区日韩欧美亚洲| 欧美肥妇bbw|