• ベストアンサー

数字を8文字の英数字にハッシュ化

例えば会員制のサイトの会員数が10000で ユーザーIDが1~10000まであるとすると それぞれのIDを8文字の英数字に暗号化したくなった場合、どの関数を使用すれば良いでしょうか? md5だと復号化できないし長すぎるので、 復号化でき文字数も指定できる方法を、ご教示いただけると幸いです。 宜しくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • shimix
  • ベストアンサー率54% (865/1590)
回答No.1

8文字の英数字となると適当な暗号化手法が見当たりませんね。8バイト(128bit)を生成する暗号化はたくさんありますが、バイナリデータなのでbase64_encodeすると12文字になります(しかも記号が混入する)。 #12文字英数記号でよければmcryptで #MCRYPT_BLOWFISHとかで・・・ ただ10000件くらいならmd5の先頭8文字で逆引きテーブルを用意した方が手っ取り早い気がします。(データベースでなく)ファイルでもいけそうな件数だと思いますが如何でしょうか。1~10000なら先頭8文字でも重複はしないハズです。

people900
質問者

お礼

回答ありがとうございました。 md5の8文字は2万件に1件かぶるみたいですね。復号できないのが残念ですが、参考になりました。

その他の回答 (1)

回答No.2

こんにちは。 復号化させたい場合暗号強度を考えなければ単純に”圧縮”をすればいいかと思います。 10進数→バイナリ変換(16進数変換)→圧縮/符号化(bzcompress等) こんな流れでいいのではないでしょうか。 単純に10000(10進数)であれば、2710(16進数)。 2バイトデータです。 この時点で考えれば、圧縮という意味はほぼないという結論に至りますが (圧縮したほうが値が長くなるだろうため) 可逆の符号化として圧縮を使えば楽なのかなとは思います。 簡単に複雑さを増したければ、入れ替えたり、圧縮の際に暗号化圧縮の関数を使う等 すればよいのではないでしょうか。 (暗号化圧縮を使用した場合も同様にサイズ的には大きくなると思いますが)

people900
質問者

お礼

ありがとうございました。 とても参考になりました。

関連するQ&A