php authcode java_PHP(authcode)加密解密

//************************加密解密*************************/

/*

* $string: 明文 或 密文

* $operation:DECODE表示解密,其它表示加密

* $key: 密匙

* $expiry:密文有效期

* */

function authcode($string, $operation = 'DECODE', $key = '', $expiry = 0)

{

// 動態密匙長度,相同的明文會生成不同密文就是依靠動態密匙

$ckey_length = 4;

// 密匙

$key = md5($key ? $key : 'livcmsencryption ');

// 密匙a會參與加解密

$keya = md5(substr($key, 0, 16));

// 密匙b會用來做數據完整性驗證

$keyb = md5(substr($key, 16, 16));

// 密匙c用于變化生成的密文

$keyc = $ckey_length ? ($operation == 'DECODE' ? substr($string, 0, $ckey_length): substr(md5(microtime()), -$ckey_length)) : '';

// 參與運算的密匙

$cryptkey = $keya.md5($keya.$keyc);

$key_length = strlen($cryptkey);

// 明文,前10位用來保存時間戳,解密時驗證數據有效性,10到26位用來保存$keyb(密匙b),解密時會通過這個密匙驗證數據完整性

// 如果是解碼的話,會從第$ckey_length位開始,因為密文前$ckey_length位保存 動態密匙,以保證解密正確

$string = $operation == 'DECODE' ? base64_decode(substr($string, $ckey_length)) : sprintf('%010d', $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') {

// substr($result, 0, 10) == 0 驗證數據有效性

// substr($result, 0, 10) - time() > 0 驗證數據有效性

// substr($result, 10, 16) == substr(md5(substr($result, 26).$keyb), 0, 16) 驗證數據完整性

// 驗證數據有效性,請看未加密明文的格式

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 {

// 把動態密匙保存在密文里,這也是為什么同樣的明文,生產不同密文后能解密的原因

// 因為加密后的密文可能是一些特殊字符,復制過程可能會丟失,所以用base64編碼

return $keyc.str_replace('=', '', base64_encode($result));

}

}

//************************加密解密結束***********************/

?>

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/376077.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/376077.shtml
英文地址,請注明出處:http://en.pswp.cn/news/376077.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

nginx環境下搭建nagios 3.5.0,及配置pnp4nagios畫圖

本文基于《LNMP最新源碼安裝腳本》,Nagios依賴PHP環境和perl環境&#xff0c;由于Nginx不支持Perl的CGI&#xff0c;需先來搭建Perl環境&#xff0c;Nagios原理介紹略。一、下載最新穩定源碼包和Perl腳本wget http://www.cpan.org/modules/by-module/FCGI/FCGI-0.74.tar.gzwget…

python indexerror怎么辦_Python IndexError:使用列表作為可迭代對象時...

這是代碼&#xff1a;import math as mprimeproduct 5397346292805549782720214077673687806275517530364350655459511599582614290primes [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127…

【Android】配置APK開發環境

【Android】配置APK開發環境1.安裝java jdk去oracle公司下載jdk-7u15-windows-i586.exehttp://www.oracle.com/technetwork/cn/java/javase/downloads/jdk7-downloads-1880260-zhs.html---C:\Documents and Settings\XXXX>java -versionjava version "1.7.0_15"Ja…

C++細節系列(零):零散記錄

老規矩&#xff1a;記錄細節&#xff0c;等待空余&#xff0c;再進行整理。 1&#xff1a;const,static,const static成員初始化。 1、const成員&#xff1a;只能在構造函數后的初始化列表中初始化 2、static成員&#xff1a;初始化在類外&#xff0c;且不加static修飾。 3、co…

java js highcharts_Highcharts.js -純javasctipt圖表庫初體驗

一.highcharts簡介以及引入highcharts作為免費提供給個人學習、個人網站和非商業用途使用的前端圖表演示插件的確使用起來十分方便和輕便。在我最近完成一個需求的時候用到了它&#xff0c; 它的兼容性也很強&#xff0c;其在標準(W3C標準)瀏覽器中使用SVG技術渲染圖形&#xf…

PHP:class const

const變量經常被當做常量用在php的類中&#xff0c;隱含的意思是這個變量是常量&#xff0c;不能被修改。編譯器會自動檢測&#xff0c;如果被賦值會被提示錯誤警告。 正確實例1&#xff1a; <?php class test {const ERRNO 100; } echo test::ERRNO."\n"; 輸出…

java web核心知識_JAVA web 相關知識點

1&#xff1a; web的三個核心標準&#xff1a;URL&#xff1a; http VS httpsHTTP: 通信協議&#xff0c;客戶端&#xff0f;服務器端信息交互方式; 特點是無狀態&#xff1b;HTML:2: HTTP 協議&#xff1a;http是通用的&#xff0c;無狀態的&#xff0c;面向對象的協議。H…

20135127陶俊杰 實驗一

北京電子科技學院(BESTI) 《Java程序設計》課實驗報告 班 級&#xff1a;201351 姓名及學號&#xff1a;陶俊杰 20135127 指導教師&#xff1a;婁佳鵬 必修/選修&#xff1a;選修 實驗日期&#xff1a; 2015年4月16日 實驗時間&…

2014.3.12-C語言小測試

測試代碼&#xff1a; 學號:14020491.請實現一個函數&#xff0c;功能為使用循環輸出以下的圖案void print_alpha(int n) {int i, j;for(i0;i<n;i){for(j0;j<i;j)printf("%c", A j);printf("\n");} }2.請實現一個函數&#xff0c;功能為刪除數組指定…

seqlist插入java_大話數據結構(五)(java程序)——順序存儲結構的插入與刪除...

獲得元素操作對于線性表的順序存儲結構來說&#xff0c;我們要實現getElement操作&#xff0c;即將線性表的第i個位置元素返回即可插入操作插入算法思路&#xff1a;1、如果插入位置不合理&#xff0c;拋出異常2、如果插入表的長度大于等于數組長度&#xff0c;則拋出異常或動態…

142. Linked List Cycle II

Given a linked list, return the node where the cycle begins. If there is no cycle, return null. Follow up:Can you solve it without using extra space? Craking interview書上原題&#xff0c;快慢指針&#xff0c;話題較簡單說明。 /** * Definition for singly-lin…

無法嵌入互操作類型ESRI.ArcGIS.Carto.MapDocumentClass.請改用適用的接口

在對地圖文檔進行操作時&#xff0c;居然出現如下問題&#xff1a; IMapDocument m_MapDocument new ESRI.ArcGIS.Carto.MapDocumentClass(); 報錯: 無法嵌入互操作類型"ESRI.ArcGIS.Carto.MapDocumentClass".請改用適用的接口. 解決方案如下&#xff1a; 解決方案—…

java文件定時讀寫_java定時任務及日志的使用

需要引入日志的兩個架包&#xff1a;log4j.jar和commons-logging.jarpackage com.lzl;import java.util.TimerTask;import org.apache.log4j.Logger;import com.sun.org.apache.commons.logging.Log;import com.sun.org.apache.commons.logging.LogFactory;public class MyTask…

Google Code Jam 2015 Round 1A Haircut 二分

題意&#xff1a;給你每個理發師的理發時間&#xff0c;問你排在隊列中的第N個位置&#xff0c;問你應該被哪個理發師剪發。 解題思路&#xff1a;二分時間&#xff0c;看這個時間到第幾個人理發了&#xff0c;然后找到臨界值&#xff0c;看這個值的時候有那些理發師接待了新旅…

java編寫科赫曲線_matlab繪制peano(皮亞諾)曲線和koch(科赫曲線,雪花曲線)分形曲線...

koch曲線matlab plot函數繪制koch曲線程序&#xff0c;程序還是比較簡單的&#xff0c;這里只繪制出了雪花的三分之一function koch_curve(number)%number代表koch的階數&#xff0c;范圍為大于等于2figureset(gcf,position,[0,0,1920,1080]);%設置窗口分辨率&#xff0c;[0,0]…

ajax翻頁效果模仿yii框架

ajax翻頁效果模仿yii框架 ajax翻頁效果&#xff0c;模仿yii框架。 復制代碼代碼如下:<!DOCTYPE html> <html> <head> <title>ajax分頁_www.jbxue.com</title> <script src"http://code.jquery.com/jquery-1.11.0.min.js"></s…

JAVA異常處理、常用類、反射、集合

異常 異常&#xff1a;在Java中是指被一個方法拋出的對象。 分類&#xff1a;檢查異常、運行時異常、錯誤 運行時異常&#xff08;uncheckd&#xff09;&#xff1a;RuntimeException和其子類 檢查異常&#xff08;checkd/搜檢異常&#xff09;&#xff1a;指Exception和其子類…

Base64 百科詞條

Base64是一種基于64個可打印字符來表示二進制數據的表示方法。由于2的6次方等于64&#xff0c;所以每6個位元為一個單元&#xff0c;對應某個可打印字符。三個字節有24個位元&#xff0c;對應于4個Base64單元&#xff0c;即3個字節需要用4個可打印字符來表示。它可用來作為電子…

java獲取mysql執行計劃_好程序員Java學習路線之MySQL的執行計劃

好程序員Java學習路線之MySQL的執行計劃。什么是執行計劃&#xff1f;執行計劃通常是開發者優化SQL語句的第一步。MySQL在解析SQL語句時&#xff0c;會生成多套執行方案&#xff0c;然后內部會進行一個成本的計算&#xff0c;然后通過優化器選擇一個最優的方案執行&#xff0c;…