プログラミングの作業に何の価値も見出せなくなってしまったd金魚による日記 このページをアンテナに追加 RSSフィード

 iTunes Music Store(Japan) なかのひと あわせて読みたいブログパーツ
|

0001 | 00 |
2004 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2005 | 01 | 02 | 03 | 04 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2006 | 00 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2007 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 |
2008 | 01 | 02 | 03 | 05 | 07 | 08 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 03 |
2010 | 03 | 04 | 06 | 07 | 09 | 10 | 11 |
2011 | 01 | 02 | 10 |
2012 | 04 |
2013 | 01 | 05 | 06 | 07 | 08 | 10 |
2014 | 02 | 03 | 05 | 09 |
2015 | 04 |
2016 | 09 | 11 | 12 |
はてな一覧
アンテナに追加
私のアンテナ
私のダイアリー
私のアーカイブ
私のアイデア
私のブックマーク
私のグループ
私のキーワード
ニュース系、今まで続いているシリーズモノの読み物
dKingyo Utility Toolkit Projectのリリース情報
やっぱり暗号化は大人の味(笑)
プログラムのパッキング方法を調べよ
ココが厳しいよMinGW
ライブラリアン通信
ゲームプログラミングどうしよう
CRCについて
ビット演算練習
d金魚の今更Ajax
Windows Tips
VC6 Tips
Win32 WTL Tips
Ruby for C++ User
Ruby Tips
今日のRubyで嵌った事
正規表現PIECE
書きかけ
続く・・・

私のダイアリーの人気記事
新しくブックマークされた記事


あまり、役に立たなそうな個人的に調べた情報や妄想に耽った事、今 勉強している事ヒソヒソと公開していたりします。 | 登録してくれている方々 | d金魚にメール | 当サイトは640x480の画面解像度に対応しています。
日記へのリンク、アンリンクはフリーですが、selfタグのついている部分のコンテンツの引用はご遠慮願います。ご協力よろしくお願いします。


 | 

2005-02-08 今日のデースケドガー は ハッシュ法を勝手に考える

studiokingyo2005-02-08

[][][][][][][][]デースケドガーハッシュアルゴリズム デースケドガーハッシュアルゴリズムを含むブックマーク デースケドガーハッシュアルゴリズムのブックマークコメント

なんか、http://d.hatena.ne.jp/studiokingyo/20050205#p2

ハッシュ関数作りが楽しくなっちゃったんだけど、SHA1の初期価値を使って見たら結構イイ感じの結果だったので載せておく

でも、両者共にバグチェックしていないです。

さまざまな条件下でテストして無いです。

ライセンスはNYSLです。

バイトくらいの値からハッシュ値を算出するのがイイみたいです。

CSVデータ出力機を自己満足に置いておきます。

http://www33.tok2.com/home/dca/dkutil.html

もし、名前を付けるとしたらデースケドガーハッシュアルゴリズム*1

でも、後になってこれが既知のアルゴリズムだったら(/ω\)ハズカシーィ

追記:既知と言うか、ハッシュ関数の理解不足からくる自爆だったのですが・・・_| ̄|○ なんか、もっと(/ω\)ハズカシーィ のですが・・・ 

_| ̄|○ { 以下はネタです。気にしないで下さい m(_ _)m

int dkcHash16(unsigned char *pd,size_t cycle){
  unsigned int v = 0;
  size_t i;
  
  //SHA1で使われている初期価値
  const static unsigned long H[3]={0x67452301,0xefcdab89,0x98badcfe};

  for(i=0;i<cycle;i++){
    v = (v << 6) + pd[i] ^ H[i & 2];
  }
  return (int)((v % 31991) & 0x7FFF);
}


変形版

int dkcHash16_(unsigned char *pd,size_t cycle){
  unsigned int v = 0;
  size_t i;
  size_t shift_ = 16 / cycle;
  if(shift_ == 0)
    shift_ = 1;
  //SHA1で使われている初期価値
  const static DWORD H[3]={0x67452301,0xefcdab89,0x98badcfe};

  for(i=0;i<cycle;i++){
    v = (v << shift_) + pd[i] ^ H[i & 2];
  }
  return (int)((v % 31991) & 0x7FFF);
}

追記:後で、思ったが、結局割って余りを出すならば普通に割るだけなら均一になるのは当たり前だと思った。(/ω\)ハズカシーィ


int dkcHash16_(unsigned char *pd,size_t cycle){
  unsigned int v = 0;
  size_t i;
  BYTE cc = 
  
  v = pd[0] | (pd[1] << 8) | (pd[2]<< 16) | (pd[3] << 24);
  
  return (int)((v % 31991) & 0x7FFF);
}

更に追記:ほんのちょっこっとだけ改良・・・

後々、しっかりと基礎を勉強しなければ・・・

int dkcHash16_(unsigned char *pd,size_t cycle){
  unsigned int v = 0;
  size_t i;
  size_t shift_ = 16 / cycle;
  if(shift_ == 0)
    shift_ = 1;
  //SHA1で使われている初期価値
  const static DWORD H[3]={0x67452301,0xefcdab89,0x98badcfe};

  for(i=0;i<cycle;i++){
    v = (pd[i] << shift_) + v ^ H[i & 2];
  }
  return (int)((v % 31991) & 0x7FFF);
}

でも、結局、実用性に耐えない・・・

_| ̄|○ { 意味も無くGoogleのヒット率上げる為にデースケドガーを連発しますorz }

*1:SHAをパックっておいてそりゃないだろ (--;) ヽ(--;)

skysky 2005/02/08 19:22 何を目的としたハッシュ関数を作ってるのかは知りませんが、作成がんばってくださいな。
連続した値をハッシュ関数(dkcHash16_)に通すと、生成した値がかなり偏ってることが分かるのでハッシュ関数作成には注意が必要です。(以下は0〜255までの値をハッシュ関数に渡す)
for( unsigned int i = 0 ; i < 0x100; i++ ){
printf( ”%2X hash:%d¥n”, i, dkcHash16_((unsigned char*)&i, 1) );
}

skysky 2005/02/08 23:47 ↑分かってるかと思いますが、リトルエンディアンの場合のコードです。

studiokingyostudiokingyo 2005/02/09 00:46 自爆!!!してしまいました。_| ̄|○
そうですね。追記の所でも気がつき、書きましたが、ハッシュ関数・・・そのようなデータの時でもしっかり値が偏らないようにしなくては・・・と、後になって気がつきました。

ネタという事で許してください。m(_ _)m

トラックバック - http://d.hatena.ne.jp/studiokingyo/20050208
 | 
Program | Debug | dKingyo Utility Toolkit | library | D言語 | 御本とか | 備忘録 | テクニック | WayBack | 格言 | 英語 | 他力本願 | news | software |

デースケドガー