首頁 php教程 PHP开发 PHP令牌 Token改進版

PHP令牌 Token改進版

Dec 14, 2016 am 11:55 AM

正是由於使用了 base64 ,所以在把這個令牌透過 GET方法發送的時候,出現了問題。 
例如:http://test/test.php?a=1+2 
你用 $_GET["a"] 取得是:1 2 ,也就是那個加號沒有了。一開始我用 urlencode 來轉換,但總有那麼一兩的結果是意料外的。

後來想想base64 的字符就限定於: [A-Za-z0-9+/=] 這麼多,加號出問題,我就把加號換成不出問題的符號,下劃線是最好的選擇。以下是修改後的程式碼: 

GEncrypt.inc.php 

程式碼如下:


class GEncrypt { 
protected stat fphp 
class GEncrypt { 
protected stat fphp 
class GEncrypt { 
protected stat f encrypt_key ); 
$ctr = 0; 
$tmp = ""; 
for($i = 0; $i if ($ctr == strlenkey $encrypt_key )) 
$ctr = 0; 
$tmp .= substr ( $txt, $i, 1 ) ^ substr ( $encrypt_key, $ctr, 1 ); 
$ctr ++; 
}

public static function encrypt($txt, $key) { 
$encrypt_key = md5 ( (( float ) date ( "YmdHis" ) + rand ( 10000000000000000, 99999999999999999 )) . rand ( 100000, 999999 ) ); 
$ctr = 0; 
$tmp = ""; 
for($i = 0; $i if ($ctr == strlen ( $encrypt_key )) 
$ctr = strlen ( $encrypt_key )) 
$ctr = 0; 
$tmp .= substr ( $encrypt_key, $ctr, 1 ) . (substr ( $txt, $i, 1 ) ^ substr ( $encrypt_key, $ctr, 1 )); 
$ctr ++;
return ( preg_replace("/\+/s","_", base64_encode ( self::keyED ( $tmp, $key ) ) )); 

//base64 [A-Za-z0-9+/ =] 
public static function decrypt($txt, $key) { 
if($txt == ""){ return false;} 
//echo preg_replace("/_/s","+",$txt) ; 
$txt = self::keyED (base64_decode ( preg_replace("/_/s","+", $txt) ), $key ); 
$tmp = ""; 
for($i = 0; $ i $md5 = substr ( $txt, $i, 1 ); 
$i ++; 
$tmp .= (substr ( $txt, $i, 1 ) ^ $md5); 

return $tmp; 



?> 

 



GToken.inc.php 
 

GToken.inc。


/**
* 原理:請求分配token的時候,想辦法分配一個唯一的token, base64( time + rand + action) 
* 如果提交,將這個token記錄,說明這個token以經使用,可以跟隨它來避免重複提交。 

*/ 
class GToken { 

/** 
* 得到目前所有的token 

* @return array 
*/ 
公共靜態函數getTokens(){ 
$tokens = $_SESSION[Son_SESSS; if (empty($tokens) && !is_array($tokens)) {
$tokens = array(); 

回傳$代幣; 


/**&f&f&ff; ($formName,$key = GConfig::ENCRYPT_KEY ){ 
$token = GEncrypt::encrypt($formName.session_id(),$key) ; 
回傳$token; 
}#o


返回$token; 
}# 



*&o*&*
公用靜態函數dropToken($token){ 
$tokens = self::getTokens(); 
$tokens[] = $token; 
GSession::set(GConfig::SESSION_KEY_TOKEN ,$tokens); ** 
* 產生一個新的Token 

* @param string $formName 
* @param 加密金鑰 $key 
* @return string 
*/ 

公共靜態函數isToken($token,$formName,$fromCheck = false,$key = GConfig::ENCRYPT_KEY){ 
if(empty($token)) return false ; 
= self::getTokens(); 

if (in_array($token,$tokens)) //如果存在,表示可以使用過的token 
return false; 

$source = GEncrypt::decrypt($token,$ key); 

if($fromCheck) 
return $source == $formName.session_id(); 
else{ 
return strpos($source,$formName) === 0; 

getTokenKey($token,$key = GConfig::ENCRYPT_KEY){
if($token == null || trim($token) == "") return false; 
$source = GEncrypt::decrypt($token,$ key); 
回傳$source != "" ? str_replace(session_id(),"",$source) : false; 


public function newTokenForSmart ); 
回self::newToken($form); 


? >

以上就是PHP token Token改進版的程式碼實例,希望對大家有幫助,更多相關內容請關注PHP中文網(www.php.cn)!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1666
14
CakePHP 教程
1425
52
Laravel 教程
1324
25
PHP教程
1272
29
C# 教程
1251
24
登入token無效怎麼辦 登入token無效怎麼辦 Sep 14, 2023 am 11:33 AM

登入token無效的解決辦法有檢查Token是否過期、檢查Token是否正確、檢查Token是否被篡改、檢查Token是否與使用者匹配、清除快取或Cookie、檢查網路連線和伺服器狀態、重新登入或請求新的Token、聯絡技術支援或開發人員等。詳細介紹:1、檢查Token是否過期,登入Token通常會設定有效期,一旦超過有效期,就會被認為無效等等。

登入token無效問題如何解決 登入token無效問題如何解決 Sep 14, 2023 am 10:57 AM

登入token無效問題可以透過檢查網路連線、檢查token有效期、清除快取和Cookie、檢查登入狀態、聯絡應用程式開發者和加強帳號安全來解決。詳細介紹:1、檢查網路連接,重新連接網路或更換網路環境;2、檢查token有效期,重新取得一個新的token,或聯絡應用程式的開發者;3、清除快取和Cookie,清除瀏覽器快取和Cookie,然後重新登入應用程式;4、檢查登入狀態。

PHP中的安全JWT令牌產生與驗證技術解析 PHP中的安全JWT令牌產生與驗證技術解析 Jul 01, 2023 pm 06:06 PM

PHP中的安全JWT令牌產生與驗證技術解析隨著網路應用的發展,使用者身份驗證與授權變得越來越重要。 JsonWebToken(JWT)是一種用於在網路應用中安全傳輸資訊的開放標準(RFC7519)。在PHP開發中,使用JWT令牌來實現使用者身份驗證和授權已成為一種常見的做法。本文將介紹PHP中的安全JWT令牌產生與驗證技術。一、JWT基礎知識在了解如何生成與

Redis儲存用戶token問題怎麼解決 Redis儲存用戶token問題怎麼解決 May 31, 2023 am 08:06 AM

Redis儲存使用者token在設計類似電商的系統時,一個常見的需求是每個頁面都需要攜帶登入使用者資訊。常見的解決方法有兩種:使用cookie保存使用JWT保存但如果系統中使用了Redis緩存,那麼還可以有第三種解決方案–將用戶token緩存在Redis中。登陸時產生一個token存入Redis//產生一個token物件,保存在redis中redisTemplate.opsForHash().put("token","user",user)

如何解決C++語法錯誤:'expected primary-expression before ':' token'? 如何解決C++語法錯誤:'expected primary-expression before ':' token'? Aug 26, 2023 pm 04:06 PM

如何解決C++語法錯誤:'expectedprimary-expressionbefore':'token'?在C++程式設計中,語法錯誤是常見的問題。其中一個常見的錯誤是出現了"expectedprimary-expressionbefore':'token"的錯誤提示。這個錯誤通常在使用條件式和三元運算子時出現。本文將介紹這個錯誤的原

Vue3+Vite怎麼使用雙token實現無感刷新 Vue3+Vite怎麼使用雙token實現無感刷新 May 10, 2023 pm 01:10 PM

一、token登入鑑權jwt:JSONWebToken。是一種認證協議,一般用來校驗請求的身份資訊和身分權限。由三個部分組成:Header、Hayload、Signatureheader:也就是頭部訊息,是描述這個token的基本訊息,json格式{"alg":"HS256",//表示簽名的演算法,預設是HMACSHA256(寫成HS256) "type":"JWT"//表示Token的類型,JWT令牌統一寫為JWT}pa

吳恩達ChatGPT課爆火:AI放棄了倒寫單詞,但理解了整個世界 吳恩達ChatGPT課爆火:AI放棄了倒寫單詞,但理解了整個世界 Jun 03, 2023 pm 09:27 PM

沒想到時至今日,ChatGPT竟然會犯下低階錯誤?吳恩達大神最新開課就指出來了:ChatGPT不會反轉單字!例如讓它反轉下lollipop這個詞,輸出是pilollol,完全混亂。喔豁,這確實有點大跌眼鏡。以至於聽課網友在Reddit上發文後,立刻引來大量圍觀,貼文熱度火速衝到6k。而且這不是偶然bug,網友們發現ChatGPT確實無法完成這個任務,我們親測結果也是如此。 △實測ChatGPT(GPT-3.5)甚至包括Bard、Bing、文心一言在內等一眾產品都不行。 △實測Bard△實測文心一言

token是什麼意思 token是什麼意思 Feb 29, 2024 am 10:19 AM

token是一種虛擬貨幣,它是一種用來表示使用者權限、記錄交易資訊、支付虛擬貨幣的數位貨幣。 token可以用來在特定的網路上進行交易,它可以用來購買或出售特定的虛擬貨幣,也可以用來支付特定的服務費用。

See all articles