ホームページ > バックエンド開発 > PHPチュートリアル > PHP の暗号化と復号化の内部アルゴリズム_PHP チュートリアル

PHP の暗号化と復号化の内部アルゴリズム_PHP チュートリアル

WBOY
リリース: 2016-07-21 15:38:47
オリジナル
832 人が閲覧しました

将它们打包成一文件就叫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;
}
$tmp を返します。
}

関数パスポートキー($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++];
}
$tmp を返します。
}
?>


以下は、この 3 つの加密解密関数の例を示します。
$txt = 「これはテストです」; $key = “テストキー”; $encrypt = パスポート_暗号化($txt,$key); $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 = パスポート_暗号化($txt,$key);
$decrypt = パスポート_復号化($encrypt,$key);
$decryptArray = unserialize($decrypt);

echo $txt.”

”;
echo $encrypt.”

”;
echo $decrypt.”

”;
echo $decryptArray.”

”;
?>



关键の地方来了当你要跳转到另外一网址,但又必保证你的セッション無误的時候,你需要对セッション作一个处理.外見似一公司有一网站又有一论坛,两特定の地方都に関心と登録がありますが、主页登录後に论坛にジャンプするときのセッション失效、つまり登录一次跑完整间公司

那要怎样来処理用户のセッション呢

网页都はい状況はなく、新しいネットワークでセッションを継続的に使用する場合は、セッションをある場所から別の場所に移動する必要があります。おそらく、すでに考えている人がいるかもしれません。URL 転送の方法でセッションを使用できます。処理セッションの量、叫$_SESSION. 以降、要注釈のセッション荢を数組にします。那么、你可以下:



复制网

代次:


//ログイン.php
< ;?php
session_start();
「fun.php」をインクルードします。
$_SESSION[“ユーザーID”]; $_SESSION[“ユーザー名”]; $_SESSION[“userpwd”]; header("場所: http://$domain/process.php?s=".urlencode(passport_encrypt(serialize($_SESSION),"sessionkey")));
?>


上の例では、$_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 のパラメーターを取得し、次に Passport_decrypt を使用してそれを復号化し、次に unserialize を使用してデータを元のデータに復元します。この処理ステップでは、Web ページがジャンプする可能性があります。ヘッダーから自由に。

この方法にはセキュリティの問題もあります。アドレス送信プロセス中に他の人に URL アドレスが取得されると、非常に恥ずかしいことになりますが、URL の内容を解読することはできません。この URL アドレスを使用して、個人アカウント、電子メール アカウント、さらには銀行口座にログインすることもできます (もちろん、これを書く人は私以外にはほとんどいないと思いますが、実際はすぐにキャンセルできます)。セッション処理。

以下は process.php の拡​​張版です
コードは次のとおりです:
include_once "fun.php ";
$_SESSION=unserialize(passport_decrypt($_GET["s"],"sessionkey"));
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 秒を超える場合は、login.php ログイン ページにジャンプさせることができます。ネットワーク速度が遅い顧客は当惑するでしょうが、この URL が誰かが取得したもので、その人が 30 秒以内にログインしない場合は、タイムアウトして再度ログインする必要があるユーザーは

$_SESSION["USERNAME"] と $_SESSION["PASSWORD"] です。これら 2 つのセッションをキャンセルする理由は、URL が誰かに取得された場合、その人は 30 秒以上以内に login.php ページにジャンプしますが、渡されたセッションはまだ有効であるためです。 URL 接尾部の login.php が Index.php に変更されても、引き続き正常にログインできます。


http://www.bkjia.com/PHPjc/321723.html

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/321723.html技術記事これらをファイルにまとめて fun.php という名前にします。次のようにコードをコピーします。
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート