前田稔(Maeda Minoru)の超初心者のプログラム入門
// 乱数を発生する unsigned short random(int *n) { *n= *n * 5041+13; return (unsigned short)*n; } |
// シャッフルする void Shuffle(int t[],int *n) { int i,j; for(i=0; i<SIZE; i++) t[i]= -1; for(i=0; i<SIZE; i++) { for(j=random(n)%SIZE; t[j]!=-1; j=(j+1)%SIZE); t[j]= i; } } |
#include <conio.h> printf("%s を変換して %s を作成しました\n",IN_F,OT_F); _getch(); |
/*★ TEXT 文章を暗号化する 前田 稔 ★*/ #include <stdio.h> #include <conio.h> #define SIZE (0x100-0x30) char buf[32768]; char IN_F[256]; char OT_F[256]= "encode.txt"; unsigned int len; int et[SIZE]; //Encode Table // 乱数を発生する unsigned short random(int *n) { *n= *n * 5041+13; return (unsigned short)*n; } // シャッフルする void Shuffle(int t[],int *n) { int i,j; for(i=0; i<SIZE; i++) t[i]= -1; for(i=0; i<SIZE; i++) { for(j=random(n)%SIZE; t[j]!=-1; j=(j+1)%SIZE); t[j]= i; } } // buf[] のコード(30 ~ FF) を et[] で暗号化する void encode(char buf[], unsigned int len) { int i,wk; unsigned char wc; wk= len; for(i=0; i<wk; i++) { wc= buf[i]; if (wc>=0x30) buf[i]= (char)(et[wc-0x30]+0x30); } } int main() { FILE *FI,*FO; //FILE の定義 int wk; wk= 123; Shuffle(et,&wk); //30 ~ FF をシャッフル printf("入力ファイル名をタイプして下さい\n"); scanf_s("%s",IN_F,256); if (fopen_s(&FI,IN_F,"rb")!=0) { printf("INPUT FILE open error[%s]\n",IN_F); return(-1); } len= fread(buf,1,32768,FI); fclose(FI); encode(buf,len); //buf[] を et[] で暗号化 if (fopen_s(&FO,OT_F,"wb")!=0) { printf("OUTPUT file open error[%s]\n",OT_F); return(-1); } fwrite(buf,1,len,FO); fclose(FO); printf("%s を変換して %s を作成しました\n",IN_F,OT_F); _getch(); return(0); } |
/*★ 暗号化した文章を復号化する 前田 稔 ★*/ #include <stdio.h> #include <conio.h> #define SIZE (0x100-0x30) char buf[32768]; char IN_F[256]= "encode.txt"; char OT_F[256]= "decode.txt"; unsigned int len; int et[SIZE]; //Encode Table int dt[SIZE]; //Decode Table // 乱数を発生する unsigned short random(int *n) { *n= *n * 5041+13; return (unsigned short)*n; } // シャッフルする void Shuffle(int t[],int *n) { int i,j; for(i=0; i<SIZE; i++) t[i]= -1; for(i=0; i<SIZE; i++) { for(j=random(n)%SIZE; t[j]!=-1; j=(j+1)%SIZE); t[j]= i; } } // buf[] の TEXT を 復号化 する void decode(char buf[], unsigned int len) { int i,wk; unsigned char wc; // Decode Table を作成する for(i=0; i<SIZE; i++) dt[et[i]]= i; wk= len; for(i=0; i<wk; i++) { wc= buf[i]; if (wc>=0x30) buf[i]= (char)dt[wc-0x30]+0x30; } } int main() { FILE *FI,*FO; //FILE の定義 int wk; wk= 123; Shuffle(et,&wk); //30 ~ FF をシャッフル if (fopen_s(&FI,IN_F,"rb")!=0) { printf("INPUT FILE open error[%s]\n",IN_F); return(-1); } len= fread(buf,1,32768,FI); fclose(FI); decode(buf,len); //buf[] を Decode if (fopen_s(&FO,OT_F,"wb")!=0) { printf("OUTPUT file open error[%s]\n",OT_F); return(-1); } fwrite(buf,1,len,FO); fclose(FO); printf("%s を Decode して %s に出力しました\n",IN_F,OT_F); _getch(); return(0); } |