はてなキーワード: Md5とは
ハッシュといえば昔から
cryptと決まっているし
新しくてもMD5かSHA-1か512だろ?それ以外は互換性の理由からそれこそ使わない。
問題はハッシュアルゴリズムじゃなくて、ソルトの生成アルゴリズムだけど、普通ソルトはシステム一律な事が多い。
もし、巻き取りがうまくできないとしたら、そりゃ、ハッシュ化されていればなんでもいいと思っている、そのシステム設計者が平文設計と同じぐらい知識が無いんだろ。
ユーザーデーターベスの以降なんて、ハッシュアルゴリズムの欄を1つ作っておくだけで十分終わる。
聞き方を変えれば、cryptかMD5かSHA以外のハッシュアルゴリズムなんて使うのか?せいぜい、ソルトぐらいだろ?差分なんて
http://anond.hatelabo.jp/20090326142330 の続き
pythonでベンチとった。試した方法は以下
長くなるので、使用したスクリプトと生の結果は http://anond.hatelabo.jp/20090326123924 に貼った。
結果としては、早さは3, 4, 1, 2の順で、3を基準にとると、
文字列長 | md5hex | crc32x4 | headtail | skipover | ループ回数 |
---|---|---|---|---|---|
256 | 6.6 | 36 | 1.0 | 1.4 | 65536 |
1024 | 8.3 | 36 | 1.0 | 2.0 | 16384 |
4096 | 26 | 85 | 1.0 | 2.5 | 4096 |
という比率になった。
文字列長が長くなるとやはり後2つが有利だ。また、今回は32文字に切り詰めたがそれでもコリジョンは発生しなかった。アルゴリズム上、数文字だけの変化には対応出来ない可能性があるが、切り詰める量が少なく入力にいくらかのランダム性があれば実用になると思う。
(追記:URLで使ったら、ランダム性が悪くてコリジョン出た。素直にmd5がベターかもしれない)
しかし、この程度の速度差であれば、コリジョン耐性を重視して素直にmd5を使用するのも良いかもしれない。特に、今時はネイティブコードのライブラリをほぼ標準で持つ処理系が多いため、まずはmd5で、としても間違いはなさそう。
それいいね。
後は、間を抜かすアルゴリズムだね。
250超えたら一つおき、でもよいかも。
int(文字列長/250)文字おきで圧縮する。
とか書きつつ。
http://search.cpan.org/~gaas/Digest-1.15/Digest.pm#Digest_speed
数字が小さいほうが高速、ではなく大きいほうが高速。
これはperlなんだけど、LLで下手に演算するより、バイナリのライブラリを使ったほうが高速らしい。
幾つか実装してベンチとってみよ。案外md5が一番早かったりしてw
連番ってどういうこと?
順方向に探査すれば?ってこと?
何に使いたいか具体的に書くと、とある処理でwebページを取得するのだけど、その時、urlをキーにmemcachedでキャッシュしようとしている。
しかし、urlが長大で250バイトを越えるとmemcachedが受け付けないので、適当な長さの文字列に変換したい。
250バイト未満のキーなら受け付けるmemcachedを使ってキャッシュすることが確定事項。
今は250バイト以上ならmd5値の16進表記を使うようにしている。
しかし、こんなところでmd5ってのも重いだけだなと。
crc32も使えるので、urlを4分割して16バイト長にするのはどうか。
実際どのくらい差があるのか。
と、思ったところでsquidとかその他実用しているキャッシュだったりハッシュテーブルだったりはどんな関数・アルゴリズム使ってるのかなと思ったわけ。
今後のためにも調べておきたいと思った。
セキュリティ目的ではない。ハッシュテーブルで使うような奴でキャッシュで使いたい。
手軽なほうが良い。軽いほうが良い。推測可能でよい。数十バイトくらいの文字列にしたい。
md5が一番汎用っぽいけど、無駄に重い気がする。crc32は軽そうだしそれなりに汎用っぽいけど、ハッシュ長が短いのがめんどい。
調べた→ http://anond.hatelabo.jp/20090327015620
ベンチ用スクリプト
#!/usr/local/bin/python from sys import argv, stderr from time import time from string import ascii_letters, join from random import choice from hashlib import md5 from binascii import crc32 from itertools import izip time_fmt = '%10s: %5d ms' shift = int(argv[1]) if len(argv)>1 and argv[1].isdigit() else 2 length = 0x100 << shift cycle = 0x10000 >> shift print >> stderr, 'string length: 0x%x, cycle: 0x%x' % (length, cycle) data = tuple(''.join(choice(ascii_letters) for i in xrange(length)) for j in xrange(cycle)) start = time() md5hex = tuple(md5(s).hexdigest() for s in data) print >> stderr, time_fmt % ('md5hex', (time() - start) * 1000) start = time() crc32x4 = tuple(''.join('%08x' % abs(crc32(s[i::4])) for i in (0, 1, 2, 3)) for s in data) print >> stderr, time_fmt % ('crc32x4', (time() - start) * 1000) start = time() startend = tuple(s[:16]+s[-16:] for s in data) print >> stderr, time_fmt % ('headtail', (time() - start) * 1000) start = time() skip = tuple(s[::(len(s)/32+1)] for s in data) print >> stderr, time_fmt % ('skipover', (time() - start) * 1000) for s in izip(data, md5hex, crc32x4, startend, skip): print join(s)
実行結果
% python hashbench.py 0 > hash0.txt string length: 0x100, cycle: 0x10000 md5hex: 199 ms crc32x4: 1081 ms headtail: 30 ms skipover: 41 ms % python hashbench.py 2 > hash1.txt string length: 0x400, cycle: 0x4000 md5hex: 83 ms crc32x4: 363 ms headtail: 10 ms skipover: 20 ms % python hashbench.py 4 > hash2.txt string length: 0x1000, cycle: 0x1000 md5hex: 52 ms crc32x4: 170 ms headtail: 2 ms skipover: 5 ms
http://b.hatena.ne.jp/entry/<URL>
となるので、ブックマークレットなどで簡単にはてブコメントを参照できる。
delicious の場合は
http://delicious.com/url/<md5ハッシュ的ななにか>
のようにブックマークレットなどで簡単に生成できないようになっており、
あるURLに対するコメント閲覧用ブックマークレットも何も用意されていない。
このため、コメント欄は、ただの概要を書くための欄として使用されるのが常である。
タグ「delphi」を含む注目エントリー - はてなブックマーク
Delphiアプリケーションのメモリリーク検出法 (山本隆の開発日誌)
http://www.componentsource.co.jp/features/delphi/
TMS Software | Productivity software building blocks
Components > Effects and Multimedia > Video. Torry's Delphi Pages
Components > Effects and Multimedia > Audio. Torry's Delphi Pages
Components > Effects and Multimedia > Voice. Torry's Delphi Pages
Components > Effects and Multimedia > Direct X. Torry's Delphi Pages
eXeScope(Windows95/98/Me / ユーティリティ)
Delphi-ML〓〓〓〓〓〓〓〓〓〓〓??About Delphi
Delphi Q & A 〓f〓〓〓〓 〓〓〓〓〓〓O〓〓(HTML〓o〓[〓W〓〓〓〓)
Delphi WAVEサウンド音を鳴らす/Tips & Tricks
5分ではじめるDelphi - 第1回 簡単なメディアプレーヤの作成(前編)
Controling sound volume from code
lsMicrophone: mxl.dwComponentType :=MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE;
MIXERLINE_COMPONENTTYPE_DST_SPEAKERS
MIXERLINE_COMPONENTTYPE_SRC_WAVEOUT
SwissDelphiCenter.ch : ...set the volume for the microphone/ mute it (enhanced)?
Components > Sound Effects > Mixer. Torry's Delphi Pages
PlaySound('C:\WINNT\Media\start.wav', 0, SND_FILENAME or SND_ASYNC);
Delphi6でプログラミング ビットマップの半透明コピー AlphaDraw
procedure TForm1.Button1Click(Sender: TObject);
bmp1.LoadFromFile('C:\Program Files\Common Files\Borland Shared\Images\Splash\256Color\FINANCE.BMP');
bmp2.LoadFromFile('C:\Program Files\Common Files\Borland Shared\Images\Splash\256Color\FACTORY.BMP');
Form1.Canvas.Draw(10,10,bmp1);
Form1.Image1.Canvas.Draw(10,10,bmp2);
bmp1.Free;
bmp2.Free;
無料版Delphi6でSTGをつくるためのプログラミング講座 Ver.2005 Jan.
SwissDelphiCenter.ch : ...get the MAC Address?
もっと楽にGUIとの連携がしたい:Python + Delphi = P4D(Python for Delphi) - ふにゃるん
Delphi WindowsのOSのバージョンを取得する/Tips & Tricks
SourceForge.net: Gecko SDK for Delphi
BDS(Delphi/BCB)用SQLiteライブラリ (山本隆の開発日誌)
SwissDelphiCenter.ch : programming tips
ナッキーの「Turbo Delphiはじめて奮戦記」- 第1回 Turbo Delphi のインストール
フリーのTurbo Delphiで始めるWindowsプログラミング:ITpro
フリーのTurbo Delphiで始めるWindowsプログラミング:ITpro
http://torrent.borland.com/turbo_hotfix_rollup.zip
http://torrent.borland.com/prereqs_jp.zip
http://torrent.borland.com/turbodelphi_jp.exe
(1) \dotNETRedist\dotnetfx.exe
(2) \dotNETRedist\langpack.exe
(3) \dotNETRedist\NDP1.1sp1-KB867460-X86.exe