从Discuz里拿出来的PHP字符串加密函数
从discuz里面发现了一个很牛的加密解密函数。此函数的厉害之处在于可以在指定时间内加密还原字符串,超时无法还原。
这样我们就可以拿此函数来做很多用途了,比如:单点登录的token加密传输啦,临时密码啦等等。
在这里记录一下,方便以后应用。
<?php /** * @param string $string 原文或者密文 * @param string $operation 操作(ENCODE | DECODE), 默认为 DECODE * @param string $key 密钥 * @param int $expiry 密文有效期, 加密时候有效, 单位 秒,0 为永久有效 * @return string 处理后的 原文或者 经过 base64_encode 处理后的密文 * * @example * * $a = authcode('abc', 'ENCODE', 'key'); * $b = authcode($a, 'DECODE', 'key'); // $b(abc) * * $a = authcode('abc', 'ENCODE', 'key', 3600); * $b = authcode('abc', 'DECODE', 'key'); // 在一个小时内,$b(abc),否则 $b 为空 */ function authcode($string, $operation = 'DECODE', $key = '', $expiry = 3600) { $ckey_length = 4; // 随机密钥长度 取值 0-32; // 加入随机密钥,可以令密文无任何规律,即便是原文和密钥完全相同,加密结果也会每次不同,增大破解难度。 // 取值越大,密文变动规律越大,密文变化 = 16 的 $ckey_length 次方 // 当此值为 0 时,则不产生随机密钥 $key = md5($key ? $key : EABAX::getAppInf('KEY')); $keya = md5(substr($key, 0, 16)); $keyb = md5(substr($key, 16, 16)); $keyc = $ckey_length ? ($operation == 'DECODE' ? substr($string, 0, $ckey_length): substr(md5(microtime()), -$ckey_length)) : ''; $cryptkey = $keya.md5($keya.$keyc); $key_length = strlen($cryptkey); $string = $operation == 'DECODE' ? base64_decode(substr($string, $ckey_length)) : sprintf('0d', $expiry ? $expiry + time() : 0).substr(md5($string.$keyb), 0, 16).$string; $string_length = strlen($string); $result = ''; $box = range(0, 255); $rndkey = array(); for($i = 0; $i <= 255; $i++) { $rndkey[$i] = ord($cryptkey[$i % $key_length]); } for($j = $i = 0; $i < 256; $i++) { $j = ($j + $box[$i] + $rndkey[$i]) % 256; $tmp = $box[$i]; $box[$i] = $box[$j]; $box[$j] = $tmp; } for($a = $j = $i = 0; $i < $string_length; $i++) { $a = ($a + 1) % 256; $j = ($j + $box[$a]) % 256; $tmp = $box[$a]; $box[$a] = $box[$j]; $box[$j] = $tmp; $result .= chr(ord($string[$i]) ^ ($box[($box[$a] + $box[$j]) % 256])); } if($operation == 'DECODE') { if((substr($result, 0, 10) == 0 || substr($result, 0, 10) - time() > 0) && substr($result, 10, 16) == substr(md5(substr($result, 26).$keyb), 0, 16)) { return substr($result, 26); } else { return ''; } } else { return $keyc.str_replace('=', '', base64_encode($result)); } } ?>

熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

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

熱門話題

Discuz後台登入問題解決方法大揭秘,需要具體程式碼範例隨著網路的快速發展,網站建置變得越來越普遍,而Discuz作為一款常用的論壇建站系統,受到了許多站長的青睞。然而,正是因為其功能強大,有時候我們在使用Discuz的過程中會遇到一些問題,例如後台登入問題。今天,我們就來大揭秘Discuz後台登入問題的解決方法,並且提供具體的程式碼範例,希望能幫助到有需要

Discuz用戶必備!改名道俱全面解析!在Discuz論壇中,改名功能一直備受用戶關注與需求。對於一些需要改名的使用者來說,透過改名道具可以輕鬆實現使用者名稱的修改,而且這也是一種有趣的互動方式。以下就讓我們深入探討Discuz中的改名道具,包括如何取得、如何使用、一些常見問題的解決方法。 1.取得改名道具在Discuz中,改名道具通常是透過點數購買或管理員

《探索Discuz:定義、功能及程式碼範例》隨著網路的快速發展,社群論壇已成為人們獲取資訊、交流觀點的重要平台。在眾多的社群論壇系統中,Discuz作為國內較知名的一種開源論壇軟體,備受廣大網站開發者和管理員的青睞。那麼,什麼是Discuz?它又有哪些功能,能為我們的網站提供怎樣的幫助呢?本文將對Discuz進行詳細介紹,並附上具體的程式碼範例,幫助讀者更

遇到Discuz密碼錯誤怎麼辦?快速解決方案分享! Discuz!是一款非常受歡迎的論壇程序,它為用戶提供了一個方便交流的平台。在使用Discuz!論壇時,有時會遇到密碼錯誤的情況,這可能會導致使用者無法正常登入和使用論壇。那麼,遇到Discuz!密碼錯誤時,我們該如何快速解決這個問題?以下將分享一些解決方案,並提供具體的程式碼範例供參考。一、檢查密碼是否

《Discuz註冊流程詳解:讓您輕鬆修改個人信息,需要具體代碼示例》Discuz是一款功能強大的社區論壇程序,被廣泛應用於各類網站,在用戶註冊和個人信息修改方面,提供了豐富的功能和介面。本文將為您詳細介紹Discuz的註冊流程,並提供具體的程式碼範例,幫助您輕鬆自訂和修改個人資訊。一、使用者註冊流程在Discuz中,使用者註冊是網站的重要功能之一,註冊流程的順暢與

標題:解決Discuz微信分享無法顯示的問題,需要具體程式碼範例隨著行動網路的發展,微信成為了人們日常生活中不可或缺的一部分。在網站開發中,為了提升使用者體驗和擴大網站的曝光度,許多網站會整合微信分享功能,讓使用者能夠輕鬆分享網站的內容到朋友圈或微信群組。然而,有時在使用Discuz等開源論壇系統時,會遇到微信分享無法顯示的問題,這給使用者體驗帶來了一定的困

Discuz網域修改步驟詳解,需要具體程式碼範例隨著網站的發展和運營,有時我們需要對Discuz論壇的網域進行修改,可能是因為更換品牌、優化網站SEO,或其他一些原因。無論是因為什麼原因,修改Discuz網域都是一個需要謹慎操作的過程,今天我們就來詳細介紹修改Discuz網域的步驟,並提供具體的程式碼範例。步驟一:備份資料在進行網域修改之前,首先要確保對網站

Discuz後台登入失敗?教你輕鬆解決!隨著Discuz作為一款流行的論壇平台,在網站搭建和管理中被廣泛使用,有時會遇到後台登入失敗的情況,讓人感到困擾。今天我們就來討論一下可能導致Discuz後台登入失敗的問題,並提供一些解決方案,也會附上具體的程式碼範例。希望本文能幫助遇到類似問題的網站管理員和開發者。 1.問題排查在解決Discuz後台登入失敗的問題之
