程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> RC4算法 N=3(C語言)

RC4算法 N=3(C語言)

編輯:關於C語言

俠客行
#include<stdio.h>
#include<string.h>

int m1[200];         //   明文 二進制
int s[8]={0,1,2,3,4,5,6,7};
int k3[200];         // 密鑰二進制
char c[200];          //  密文
int count;

int main(void)
{
  int i,j,n;
  char m0[100];

  int T[8];
  printf("輸入密鑰長度:n");
  scanf("%d",&n);
  printf("初始密鑰:n");
  for(i=0;i<n;i++)
    scanf("%d",&T);
    getchar();
  if(n<8)
    {
    for(i=0;i<8;i++)
    T=T[i%n];
    printf("初始T盒:n");
    for(i=0;i<8;i++)
    printf("%d",T);
    printf("n");

    }
    else
    {
    printf("輸入錯誤,退出程序n");
     exit(1);
    }

 

   void  mingwenchuli(char m0[100]);// 明文處理
   mingwenchuli(m0);
   void  miyao(int T[8]);//  密鑰生成
   miyao(T);
   void jiami(int m1[200],int k3[200]); // 加密
   jiami(m1,k3);
}

void mingwenchuli(char m0[100])            // 明文處理
{
        int i,j,r,n,temp;
    int m[200];
   printf("請輸入明文字符:n");
   i=0;
   while((m0=getchar())!=n)
        i++;
       m0=;
   j=0;
   count=0;
   int z=strlen(m0);
   int y[200];
  for(i=0;i<z;i++)
   {
      r=0;
      int k=0;
      y=int(m0);
             do{
           m[r]=y%2;    //  轉換 為 二進制
       y=y/2;
        m1[count]=m[r];
        r++;
        count++;
        }while(r!=7);
   for(j=count-1;j>=count-3;j--)
        {
        temp=m1[j];
        m1[j]=m1[j-6+k];
        m1[j-6+k]=temp;
        k=k+2;
        }
    }

    m1[count]=;

   printf("輸出明文二進制形式:n");
   for(r=0;r <count; r++)
        printf("%d",m1[r]);
        printf("n");
}
void  miyao(int T[8])
{
        int j,p;
        int i,temp,t,l;
    int k[100];
    int k2[200];
        j=0;
        for(i=0;i<8;i++)  // 密鑰調度
        {
                j=(j+s+T)%8;
                temp=s;
                s=s[j];
                s[j]=temp;
        }
         printf("輸出s盒數組:n");
        for(i=0;i<8;i++)
        printf("%d",s);             // 輸出  S 數組
    printf("n");

        i=0;
        j=0;
        for(t=0;t<(count/3+1);t++)//  偽隨機調度算法
        {
                i=(i+1)%8;
                j=(j+s)%8;
                temp=s;
                s=s[j];
                s[j]=temp;
                l=(s+s[j])%8;
                k[t]=s[l];
        }
    printf("輸出密鑰十進制形式:n");
        for(t=0;t<(count/3+1);t++)
        printf("%d",k[t]);          // 輸出 密鑰  -----十進制
        printf("n");
       
  p=0;       
for(i=0;i<(count/3+1);i++)
   {
    j=0;
           do{
           k2[j]=k%2;          // 二進制轉換
       k=k/2;
       k3[p]=k2[j];
        p++;
        j++;
      }while(j!=3);

      temp=k3[p-1];
      k3[p-1]=k3[p-3];
      k3[p-3]=temp;
   }
    k3[p]=;

    printf("輸出密鑰二進制形式:n");
   for(j=0;j<p;j++)
   printf("%d",k3[j]);
   printf("n");
}
                    
void jiami(int m1[200],int k3[200])
{
     int i,j;
   for(i=0;i<count;i++)            //異或加密
     c=m1^k3;
     printf("輸出加密密文:n");
   for(i=0;i<count;i++)       
         printf("%d",c);
         printf("n");
}

\

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved