« KDEがWindowsとMacOSXを・・・ | トップページ | ヒル暗号プログラム解説 »

2008/01/30

ヒル暗号完成

ヒル暗号プログラムが完成しました。

void hill(int u[2], int key[4], int hkey[4]) 
{ 
  int i, det_a, t, angou[2]; 
  det_a = (key[0]*key[3] - key[1]*key[2] + 28) % 28; 
  if(det_a < 0) det_a += 28; 
  t = add_gcd(det_a, 28); 
  if(t == 0){ 
    fprintf(stderr, "This keys are incorrect!\n"); 
    exit(1); 
  } 
  angou[0] = ((key[0]*u[0] + key[1]*u[1])+28) % 28; 
  angou[1] = ((key[2]*u[0] + key[3]*u[1])+28) % 28; 
  for(i=0 ; i<2 ; i++){ 
    if(angou[i] < 0) angou[i] += 28; 
  } 
  //---Hukugou Kagi--- 
  hkey[0] = (t*key[3]+28) % 28; 
  hkey[1] = (t*key[1]*(-1)+28) % 28; 
  hkey[2] = (t*key[2]*(-1)+28) % 28; 
  hkey[3] = (t*key[0]+28) % 28; 
  for(i=0 ; i<4 ; i++){ 
    if(hkey[i] < 0) hkey[i] += 28; 
  } 
  u[0] = angou[0]; 
  u[1] = angou[1]; 
}

解説はまた今度ということで・・・。(とっても眠い)

ところで、ヒル暗号の暗号鍵を考えるのは面倒なので鍵生成プログラムを作りました。

#include <stdio.h> 
#include <math.h> 

int add_gcd(int a, int b) 
{ 
  int r_pre = a, r = b, r_next; 
  int x_pre = 1, x = 0, x_next; 
  int y_pre = 0, y = 1, y_next; 
  int ans_x, ans_y, ans_gcd, ans, q, k = 1; 
  while((r_next = r_pre%r) != 0){ 
    q = r_pre / r; 
    k++; 
    x_next = q*x + x_pre; 
    y_next = q*y + y_pre; 
    r_pre = r; 
    r = r_next; 
    x_pre = x; 
    x = x_next; 
    y_pre = y; 
    y = y_next; 
  } 
  ans_x = pow(-1, k) * x; 
  ans_y = pow(-1, k+1) * y; 
  ans_gcd = (ans_x * a)+(ans_y * b); 
  if(ans_gcd == 1) ans = (ans_x + b)%b; 
  else ans = 0; 
  return ans; 
} 

int main(void) 
{ 
  int i, j, k, l; 
  int det, check; 

  for(l=1 ; l<=28 ; l++){ 
   for(k=1 ; k<=28 ; k++){ 
    for(j=1 ; j<=28 ; j++){ 
     for(i=1 ; i<=28 ; i++){ 
      det = (i*l - j*k + 28) % 28; 
      check = add_gcd(det, 28); 
      if(check != 0) 
       printf("key=(%d %d %d %d)\n", i, j, k, l); 
     } 
    } 
   } 
  } 

  return 0; 
} 

|

« KDEがWindowsとMacOSXを・・・ | トップページ | ヒル暗号プログラム解説 »

Algorithm」カテゴリの記事

C」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/222903/17900190

この記事へのトラックバック一覧です: ヒル暗号完成:

« KDEがWindowsとMacOSXを・・・ | トップページ | ヒル暗号プログラム解説 »