1

「秘密鍵を使用したphp5でのutf-8文字列の単純な暗号化/復号化」という件名について、誰かが私にアドバイスしてもらえますか?独立したライブラリに関するアドバイスはありますか? (32/64 ビット マシンには依存しません)。

$encryptedTextUTF8 = simpleEncrypt($originalTextUTF8, $secret);
echo simpleDecrypt($encryptedTextUTF8, $secret); // outputs $originalTextUTF8
4

2 に答える 2

2

mcrypt 拡張機能の使用: http://us.php.net/manual/en/book.mcrypt.php 次のようなものが実現可能です:

$pass      = 'password_string_to_be_encrypted';
$string    = 'password_string_to_be_decrypted';
$salt      = 'your_salt';
$pepper    = 'your_extra_salt';
$encrypted = base64_encode( mcrypt_encrypt( MCRYPT_RIJNDAEL_256, md5( $salt . $pass . $pepper ), $string, MCRYPT_MODE_CBC, md5( md5( $salt . $pass . $pepper ))));
$decrypted = rtrim( mcrypt_decrypt( MCRYPT_RIJNDAEL_256, md5($salt . $pass . $pepper), base64_decode( $string ), MCRYPT_MODE_CBC, md5( md5( $salt . $pass . $pepper))), "\0");

編集:間違っていることが証明されたので、暗号化の md5 部分を削除することをお勧めします。何が良いかはまだわかりませんが、調査に十分な時間ができたら、投稿を更新しようと思います..申し訳ありません! :)

于 2011-03-09T18:58:23.727 に答える
1

PHP 文字列は、文字エンコーディングが何であるかを知りません (または気にしません)。それらは単なるバイトのコレクションです。これにより、ここでは UTF-8 についてまったく心配する必要がなくなります。

対称鍵暗号化を求めているため、おそらくmcrypt 拡張機能を使用することをお勧めします。AES(「Rijndael」)を含む、さまざまな暗号が利用可能ですMcrypt 自体は、32 ビットまたは 64 ビット マシン上にあるかどうかは気にしません。

暗号化を使用するには、コードだけで適切に説明できるかどうかわからない重要な知識が必要であり、暗号化コードのコピーと貼り付けは悪い、悪い考えであるため、サンプルコードを提供するつもりはありません.

ブロック暗号の動作モードがどのように機能するかを理解することは、実行している作業に適したモードを選択するのに役立ちます。この理解は、他の言語で開発されたプログラムを暗号化されたデータで動作させたい場合にも必要です。これらのプログラムは異なるデフォルトの暗号モードと異なるパディング スキームを使用するためです。

于 2011-03-09T18:56:18.973 に答える