PHP の暗号化および復号化の内部アルゴリズム

WBOY
リリース: 2016-06-13 12:16:57
オリジナル
987 人が閲覧しました

将它们打包成一文件就叫fun.php吧

复制代代码如下:


functionパスポート_encrypt($txt, $key) {
srand((double)microtime() * 1000000);
$encrypt_key = md5(rand(0, 32000));
$ctr = 0;
$tmp = '';
for($i = 0;$i $ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;
$tmp .= $encrypt_key[$ctr].($txt[$i] ^ $encrypt_key[$ctr ]);
}
returnbase64_encode(passport_key($tmp, $key));
}

関数パスポート_decrypt($txt, $key) {
$txt = パスポート_キー(base64_decode($txt), $key);
$tmp = '';
for($i = 0;$i $md5 = $txt[$i];
$tmp .= $txt[ $i] ^ $md5;
}
return $tmp;
}

関数 passport_key($txt, $encrypt_key) {
$encrypt_key = md5($encrypt_key);
$ctr = 0;
$tmp = '';
for($i = 0; $i $ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;
$tmp .= $txt[$i] ^ $encrypt_key[$ctr ];
}
return $tmp;
}
?>



以下は、この 3 つの加密解密関数を深く理解するための例です。

复制代码 代码如下:


//string.php
include “fun.php”;

$txt = “これはテストです”;
$key = “テストキー”;
$encrypt =passport_encrypt($txt,$key);
$decrypt =passport_decrypt($encrypt,$key);

echo $txt.”


”;
echo $encrypt.”

”;
echo $decrypt.”

”;
?>

//array.php
include “fun.php”;

$array = array(
"a" => "1",
"b" => "2",
"c" => "3",
"d" => "4"
);
//serialize一文字列を返す,unserialize原
$txt = Serialize($array);
$key = “テストキー”;
$encrypt =passport_encrypt($txt,$key);
$decrypt =passport_decrypt($encrypt,$key);
$decryptArray = unserialize($decrypt);

echo $txt.”

”;
echo $encrypt.”

”;
echo $decrypt.”

”;
echo $decryptArray.”

”;
?>



关键の地来了当你要跳转另外一網址、但又要保证你的セッション無误的時候,你需要对セッション作一处理.外見似一公司有一網站また一论坛、二地方都有膌和登录、但又不想让用户主页登录後论坛に跳躍の時セッション失效、即ち登录一次跑完整间公司

那要ユーザーのセッションを処理します

ネットワーク都は状態がありません。新しいネットワーク内でセッションを継続的に使用する場合は、セッションをある場所から別の場所に移動する必要があります。 、私は URL 転送経由で使用できます。しかし、PHP には処理セッションの量があり、$_SESSION を呼び出します。以降、注釈が必要なセッションを 1 つの数グループに変換します。 >

复制代码代码如下:

//login.php

session_start();
「fun.php」をインクルードします。
$_SESSION[“ユーザーID”];
$_SESSION[“ユーザー名”];
$_SESSION[“userpwd”];

header("場所: http://$domain/process.php?s=".urlencode(passport_encrypt(serialize($_SESSION),"sessionkey")));
?>


上の例では、事前に Serialize を使用して $_SESSION を保存可能なデータに変更し、その後 passport_encrypt によってこのデータを加密します。urlencode の原因は、$_SESSION の加密により、画像素材が生成される可能性があります。望まれないコード、したがって、なんとか(事实证明非常に有效)


処理下先


复制代 代以下:

//process.php

session_start();
「fun.php」を含める;
$_SESSION=unserialize(passport_decrypt($_GET["s"],"sessionkey"));
header("場所: http://$domain/index.php");
?>



最初に $_GET["s"] を使用して URL のパラメータを取得し、次にパスポート_decrypt を使用してそれを復号化し、次に unserialize を使用してデータを元のデータに復元します。この処理ステップでは、 Web ページはヘッダー Jump を自由に渡すことができます。

この方法にはセキュリティの問題も伴います。アドレス送信プロセス中に他人に URL アドレスが取得されると、URL の内容を解読できない可能性があります。この URL アドレスを直接使用して、個人アカウント、電子メール アカウント、さらには銀行口座にログインすることもできます (もちろん、このように書く人はほとんどいません。私は例外です (笑))。

次は process.php の拡​​張バージョンです

コードをコピーしますコードは次のとおりです:


session_start();
include_once "fun.php"
$_SESSION=unserialize(passport_decrypt($_GET["s) "],"セッションキー"));
if((time()-$_SESSION["TIME"])>30){
header("場所: http://$domain/login.php ");
unset($_SESSION[ "USERNAME"]);
unset($_SESSION["PASSWORD"]);
}
else
header("場所: http:/ /$domain/index.php");
?>



このファイルを書き込む前に、ログイン側でも設定する必要があります

$ _SESSION["TIME"] = time();


これを設定する主な理由は、ジャンプに 30 秒以上かかる場合に、ジャンプさせることができます。申し訳ありませんが、この URL が誰かによって取得され、その人が 30 秒以内にログインしなかった場合、申し訳ありませんが、タイムアウト後に再度ログインしてください。 >
$_SESSION["USERNAME"] と $_SESSION["PASSWORD"] これら 2 つは、ユーザーがログインするときに入力する必要があるユーザー名とパスワードです。これら 2 つのセッションをキャンセルする理由は、URL がたとえその人が 30 秒以上かかっていても、login.php ページにジャンプしますが、URL 接尾部の login.php がindex.php に変更されている限り、渡されたセッションは引き続き有効です。ログインに成功しました。
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート