RSA暗号化ソース

C言語の課題です
わからないので、わかる人教えてください
*以下ソース
キー作成のソース
#include
#include
#include

int gcm(int,int);
int prime(void);
int main()
{
     int p,q,n,e,x,d,i=0;
     int keep,rn;

     do{
        p = prime()%128;
        q = prime()%128;
      }while(p==q);
      printf("p=%d,q=%d\n",p,q);
      n = p*q;
      printf("n=%d\n",n);
      keep = ((p-1)*(q-1));
      while(1){
             x = prime();
             if(gcm(keep,x)==1 && q != x && x < n){
                       e = x;
                       break;
             }
       }
      while(1){
             d = i;
             if(((e*d)%keep)==1){
                       break;
             }
             i++;
      }
      printf("公開鍵=%dと%d\nkeep=%d\n",n,e,keep);
      printf("秘密鍵d=%dとn=%d\n",d,n);
}

prime関数
#include

#include

int gcm(int data1,int data2)
{
     while(data1!=data2){

          if(data1>data2){
          data1 = gcm(data1-data2,data2);
}      
          else{
                data2 = gcm(data1,data2-data1);
            }
            return data1;
}
int prime(void){
     int data,cnt=2;
     srand((unsigned)time(NULL));

     while(1){
         data = rand() % 10000;
         while(data!=cnt){
             if(data%cnt==0){
             cnt=2;
             break;
             }
             cnt++;
             if(cnt==10000){
                  srand((unsigned)time(NULL));
                  cnt=2;
                  break;
             }
         }
         if(data==cnt & data!=2){
              return data;
         }
}

encode(暗号化関数)
//encode
#include

int chage_num(char *);
int change_code(int ,int ,int);

int main(int argc,char *argv[])
{
        int j=0,i=0;
        int num[2];
        int key[10];
        char sample[10]="abcde";
         if(argc!=3){
            printf("入力エラー\n");
         }
         else{
            for(i=1;i<3;i++){
                num[i-1]=change_num(argv[i]);
                printf("変換された数値→%d\n",num[i-1]);
              }
              while(sample[j]!='\0'){
                  key[j]=change_code(sample[j],num[0],num[1]);
                  printf("%d文字目変換=%d=%c\n",j+1,key[j],sample[j]);
                  j++;
              }
         }
}

decode(復号化)
//decode
#include
#include

int change_num(char *);
int change_code(int ,int ,int);

int main(int argc,char *argv[])
{
      int j=0,i=0;
      int cnt=0,inp;
      int key[20];
      int num[2];
      char hira[50];

      if(argc!=3){
          printf("鍵入力エラー\n");
      }
      else{
          for(i=1;i<3;i++){
               num[i-1]=change_num(argv[i]);
               printf("変換された数値→%d\n",num[i-1]);
          }
          printf("暗号文を入力\n終了するときはCtrl+dを押してください\n");
          while(scanf("%d",&inp)!=EOF){
               key[j] = inp;
               j++;
               cnt++;
          }
          for(i=0;i               hira[i]=change_code(key[i],num[0],num[1]);
               printf("%d文字目変換=%d\n",i+1,hira[i]);
          }
          printf("平文の中身↓\n");
          j=0;
          while(hira[j]!='\0'){
               printf("%c",hira[j]);
               j++;
          }
          printf("\n");
      }
      return 0;
}

code_conv関数
#include

int change_code(int cha,int x,int y){
     int mod,i;

     printf("cha = %d\nx = %d\ny = %d\n",cha,x,y);
     mod = cha;
     for(i=0;i          mod=(cha*mod)%y;
          //printf("mod = %d\n",mod);
     }
     return mod;
}
int change_num(char *x){
     int i,mo=0;

     while(*x!='\0'){
         mo *= 10;
         mo += *x-48;
         x++;
     }
     return mo;
}

これのkey_createとprimeをくっつけて実行して秘密鍵と公開鍵を2個ずつ作る

@は、encodeとcode_convをくっつけnとeをコマンドライン入力をして
初期値で与えた文字を暗号化

暗号化されたものを、decodeとcode_convをくっつけコマンドライン入力で秘密鍵dとeをまた入力して復号化するプログラムなんだが、うまいこといけないんだ・・・
このソースで何が間違ってるかがわからない!!
誰か教えて!!
スポンサーサイト

Comment

やっほ~~w
時期的にもう解決してるかもしれないが、こういう質問をするときは、どういう問題(エラーや実行結果)も書いてると、返事を下記やすいんだけどねw
しかしなんで今C言語してるん?仕事か?w
  • 2009/10/21 22:50
  • 魚雷
  • URL
Re: タイトルなし
魚雷くん
無事解決しましたよ^^
次からはどうゆうエラーも出るかをちゃんと書くようにしますw
このC言語は学校の授業の課題なんですよ~w
  • 2009/10/28 00:02
  • ネコたん
  • URL
Comment Form
公開設定

Trackback


→ この記事にトラックバックする(FC2ブログユーザー)
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。