プロが教える店舗&オフィスのセキュリティ対策術

Apache1.3.37+PHP5.2.4+MySQL51.22のレンタルサーバでWEBコンテンツを作っています。

フォームから入力されたパスワードを、DBに格納する際、暗号化したいと思います。

MD5やsha1やcryptなどいろいろあるのですが、8文字を超える文字の暗号化ができないようです。

8文字を超える暗号化はどうすればいいのでしょうか?

よろしくお願いします。

A 回答 (4件)

説明不足ではありましたが、マニュアルをよくみてください。


マニュアルには「標準のDESベース~」と続いていますが、

※これは暗号化アルゴリズムDESを使った場合です。
少なくともMD5 ではもっと長い文字列が使えます。(Linux だと内部関数から256文字くらい)
マニュアルには、MD5やBlowfish なんかを使った例があると思います。
    • good
    • 0
この回答へのお礼

度々ご回答いただきありがとうございます。
PHPも素人で、初めて暗号化するのでよくわかっていませんでした。

DESなどもよくわかっていないのですが、MD5やSha1などで、長い文字列を暗号化できることがわかりましたので、とりあえずこの件は解決です。(^^ゞ
暗号化周りの知識について、少し勉強してみます。

お礼日時:2008/01/06 20:41

僕cryptの使い方よくわかんないんですけど、


もし8文字以上の文字が送られてきたら、それを8文字ずつ区切って、
まず頭の8文字で暗号を作る。
次はそれをキーにして2つ目の8文字をつかってもう一度暗号を作り出すという方法でいいんじゃないでしょうか?
これなら100000文字だって暗号化できますよ笑
    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2008/01/06 20:38

crypt関数のことだと思うのですが、マニュアルには下記のように書かれています。


何かを勘違いされているのでは?
ついでにDES ではなく、MD5にすればそこそこ長くなると思いますが。
もうちょっと、本格的な暗号化なら、Mcrypt のライブラリを使う必要があるとは思います。

「標準の DES ベースの暗号化の場合、crypt() は出力の最初の 2 文字を salt として使用します。また、 str の最初の 8 文字しか使用しません。 つまり、最初の 8 文字が同じである長い文字列は、 同じ salt を使う限り同じ結果となります。 」
    • good
    • 0
この回答へのお礼

> 最初の 8 文字が同じである長い文字列は、 同じ salt を使う限り同じ結果となります。

そうです。
この部分を見ました。
つまり、saltが同じ場合、
「12345678」と「1234567890123456」を暗号化した場合、同じ結果になってしまうので、いくらパスワードを長くしても意味がないのではないかと思っています。

お礼日時:2008/01/06 17:28

>8文字を超える文字の暗号化ができないようです。



できると思いますがなにかエラーでもでますか?
    • good
    • 0
この回答へのお礼

質問の内容が悪かったようです。

8文字を超える文字列を暗号化しても、9文字目以降は無視されるため8文字目までが変わらなければ同じ結果になる。と説明書きがありました。

8文字を超える暗号化が「不可能」という意味ではありません。

お礼日時:2008/01/05 17:49

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!