- PR -

PHPでencrypt暗号化したい場合

投稿者投稿内容
太郎
会議室デビュー日: 2005/02/09
投稿数: 11
投稿日時: 2005-04-16 15:31
hidemaruさん、angelさん 回答ありがとうございます。

色々調べてみたのですが、

$string2 = crypt($string1);で指定すれば、$1$・・・

と34文字くらいで表示されますが、$string2 = crypt($string1,$string1);と

引数(salt?)を指定すれば、13文字の暗号化して表示する事ができるみたいです。

色々な情報ありがとうございました。大変勉強になりました。
angel
ぬし
会議室デビュー日: 2005/03/17
投稿数: 711
投稿日時: 2005-04-16 15:50
1つ突っ込みです。
引用:
$string2 = crypt($string1,$string1);と
引数(salt?)を指定すれば、13文字の暗号化して表示する事ができるみたいです。


saltは、暗号化したデータから、元のデータの予測を困難にするために、ランダムなデータを使用すべきものです。
なおかつ、暗号化したデータには salt の情報が残ってしまいますから、暗号化対象のデータを salt として流用するのはお奨めできません。

…で、13文字になる暗号化(標準DES)では、salt に使用されるのは、指定した文字列の先頭2文字ですから、結局2文字だけランダムな文字を用意すれば良いはずです。
(文字の範囲は 0〜9 と a〜z と A〜Z と ./ の64文字)

以上、ご参考まで。

[ メッセージ編集済み 編集者: angel 編集日時 2005-04-16 16:09 ]
hidemaru
常連さん
会議室デビュー日: 2004/03/22
投稿数: 44
投稿日時: 2005-04-16 18:47
angelさんの情報で、
おそらく、PHP定数の、 CRYPT_MD5 が有効になっているため、
salt を指定しない状態で、
「 CRYPT_MD5 - $1$ で始まる12文字のSALTを有するMD5暗号」
となっているのだと思います。

define() 関数で、定数を変更して、調べてみてください。

CRYPT_MD5 を無効にするには、おそらく
define("CRYPT_MD5",0);

そして、「 CRYPT_STD_DES - 2文字 SALT の標準 DES 暗号」 を有効にするには、
define("CRYPT_STD_DES",1);

でいいと思います。(0と1が逆だったらごめんなさい)
太郎
会議室デビュー日: 2005/02/09
投稿数: 11
投稿日時: 2005-04-18 21:01
angelさん、hidemaruさん指摘とアドバイスありがとうございます。

hidemaruさんが教えていただいたプログラムですが
define("CRYPT_MD5",0);などやってみましたが、変化が見れませんでした。


angelさんが指摘された$string2 = crypt($string1,$string1);を
$string2 = crypt($string1,"it");として実行すると
itjqrIPhMQ5WY という風に最初の2文字itと表示されるようになりました。

そこで質問ですが、このパスワードは他のコンピュータにデータを移行しても使えますか?(フォーマットした場合など)
やはり、コンピュータが変わるとパスワードも再設定しなければならないのでしょうか?
angel
ぬし
会議室デビュー日: 2005/03/17
投稿数: 711
投稿日時: 2005-04-18 22:48
引用:
そこで質問ですが、このパスワードは他のコンピュータにデータを移行しても使えますか?(フォーマットした場合など)


それは問題無いと思いますよ。
データを載せる機器に関係なく、salt と元の文字列から一意に決まるデータですから。
太郎
会議室デビュー日: 2005/02/09
投稿数: 11
投稿日時: 2005-04-19 17:06
angelさん、回答ありがとうございます。

今回の件で、データの暗号化や移行もできそうです。

アドバイスありがとうございました。

スキルアップ/キャリアアップ(JOB@IT)