• ベストアンサー

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

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

  • PHP
  • 回答数2
  • ありがとう数2

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

  • ベストアンサー
  • 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

  • mcryptで英数字(12未満)のみにする方法

    指定した文字をmycryptを使って12文字未満の英数字に暗号化したいのですが、 記号など含まれず、英数字のみに暗号化するにはどのようなコードを書けばよいのでしょうか? コードを書いて頂けると助かります。 宜しくお願い致します。

    • 締切済み
    • PHP
  • Md5の解読

    Md5で暗号化された文字列を復号したいのですが、どこかよい解読サイトかツールまたはプログラムはありませんでしょうか。

  • 全角文字と半角英数字の文字数をそれぞれ別に計上したい

    エクセルのワークシート上で、そのシートにある全角文字と半角英数字の文字数をそれぞれ別に計上したいのですがそんな便利な関数があれば教えて下さい。

  • 数値・文字列を決まった範囲の数値に変換・割り当てる(ハッシュする?)方

    数値・文字列を決まった範囲の数値に変換・割り当てる(ハッシュする?)方法について ハッシュ関数を使えば、ある文字列・数値を何らかの法則で暗号のように変換できることは分かったのですが、その変換される結果の範囲を決まった数値として指定することは可能なのでしょうか。 例えば『文字列を「1~95」の数値のどれかに割り当てたい』という感じです。 ランダムでなく、何度やっても同じ結果にしたいのです。 また、範囲は例では「1~95」としていますが、「1~230」「1~500」など自由に変更したいと思っています。 ※以前質問した占いに関連するものでして、結果の数が定まっていないため、 結果の数に応じて、元となるデータから占い結果に割り当てるということをやりたいと思っています。 ご教示いただけますようお願いします。

    • ベストアンサー
    • PHP
  • 《excel or word》全角文字を検索して削除、もしくは半角文字のみを抜き出したい

    全角文字で書かれた、日本語の文があります。(一般的な文章ですので、文字数は勿論任意です) その中に、半角英数字8文字で書かれたID番号が点在しています。 (IDの前後の文字数、またひとつの分の総文字数は任意です) …という内容が一つのセルに入っていて、それが数千行あるエクセルのブックがあります。 この中から、半角英数字8文字のIDのみ、取り出したいのです。 (半角英数字はIDにしか使われていない、という認識です) 1)半角8桁の英数字だけ別セルに取り出す 関数で何とかならないかと思いましたが、ごく一般的な文章なので、IDの前後の文字数がバラバラで断念しました 2)全角文字のみ検索し、置き換えで削除する ワードにコピーしてやってみようと思いました。 2003なのですが、「任意の英数字」は検索できても、「任意の全角文字」の検索機能はないようです。 (「任意の文字」の項目が、全角文字に該当するのかと思い、検索置換をしてみたら、どうやら半角英数字も該当するようでした) 実際困っております。 何かいい手はないでしょうか。

  • PHPでの文字操作について

    簡単にいうとPHPで暗号化ロジック関数を作成しようと考えています。 ※この暗号化は復号出来る事を前提に考えています。 簡単なレベルで元の文字列をまず16進数状態に変換して戻す という事が出来ないか?と考えています。 これが出来ればビットに数字を足したり引いたりした値を暗号化 文字列としてできるのではないかと思っています。 一応現在文字列の16進数表記は以下の手順で出来るという事が 分かったのですが、16進数表記にしたデータを元の文字列に 戻す方法が分かりません。 何か良い方法が在れば宜しくお願いします。 少し調べたら16進数から文字列に戻すにはエンディアンを考慮~ という説明があるのですが、私にはハッキリと分からない状態です。 【16進数化テスト】 <?php ### 元データの設定 $data01 = "テストデータ"; ### 16進数表記化 $data02 = bin2hex($data01); ### 暗号化情報の表記 echo "暗号前:" . $data01; echo "暗号後:" . $data02; ?>

    • ベストアンサー
    • PHP
  • 文字列の暗号化と復号化

    .NETで文字列を固定長に暗号化したい。(ユニコード対応できる) また、暗号化したものを復号化します。 .NETに付いている暗号化のモジュールはいくつがありますが、その以外のやり方がありましょうか? 例:何桁の平文を暗号化しでも8桁の十六進数又はBASE64の秘文になる。

  • URL正規表現

    現在会員制サイトを作成しており http://sample.com/USER_ID/ のようなユーザーIDを含むURLを取得したいと思っています。 USER_ID 半角英数字(ハイフンアンダーバーを含む)の文字列の正規表現の記述をご教授いただけるとありがたいです。

    • ベストアンサー
    • PHP
  • パスワードの解析方法

    パスワードの解析方法が知りたいです。 暗号技術に関する勉強を興味本位で始めたんですが、暗号化された文字列を解読して復号する事ができません。 判明しているのは以下です。 ・英字と数字を判別する。 ・英字は大文字、小文字を判別する。 ・平文の英数字の文字列の数に関わらず、暗号化された文字列は11文字。 暗号化された文字列は『gxhdlde85rt』です。 ホームページなどで入室ロックをかける時などに利用する暗号方法らしいのですが、どう解読したら良いですか?

  • ワードで主な文章は縦書き、顔文字と英数字は90度回転させたい

    ワードで、ページ設定が縦書きでポイント指定、文字数・行数指定があり、文章の中で英数字や顔文字を使って、1文字づつ90度回転させて、1行におさめた文章を入れたいのですが、いろいろ調べてみましたが、要件を満たすものは見つかりませんでした。 何かいい方法をご存知の方、教えていただけませんか?