phpxxtea加密
① (php)session與cookie的區別
這兩者,區別和聯系其實也挺深奧的,總是了解一些皮毛,每次都得上網查,今天寫下來,每隔段時間就看看,加深記憶。
Session是由應用伺服器維持的一個伺服器端的存儲空間,用戶在連接伺服器時,會由伺服器生成一個唯一的SessionID,用該SessionID 為標識符來存取伺服器端的Session存儲空間。而SessionID這一數據則是保存到客戶端,用Cookie保存的,用戶提交頁面時,會將這一 SessionID提交到伺服器端,來存取Session數據。這一過程,是不用開發人員干預的。所以一旦客戶端禁用Cookie,那麼Session也會失效。
伺服器也可以通過URL重寫的方式來傳遞SessionID的值,因此不是完全依賴Cookie。如果客戶端Cookie禁用,則伺服器可以自動通過重寫URL的方式來保存Session的值,並且這個過程對程序員透明。
可以試一下,即使不寫Cookie,在使用request.getCookies();取出的Cookie數組的長度也是1,而這個Cookie的名字就是JSESSIONID,還有一個很長的二進制的字元串,是SessionID的值。
大家都知道,http是無狀態的協議,客戶每次讀取web頁面時,伺服器都打開新的會話,而且伺服器也不會自動維護客戶的上下文信息,那麼要怎麼才能實現網上商店中的購物車呢,session就是一種保存上下文信息的機制,它是針對每一個用戶的,變數的值保存在伺服器端,通過SessionID來區分不同的客戶,session是以cookie或URL重寫為基礎的,默認使用cookie來實現,系統會創造一個名為JSESSIONID的輸出cookie,我們叫做session cookie,以區別persistent cookies,也就是我們通常所說的cookie,注意session cookie是存儲於瀏覽器內存中的,並不是寫到硬碟上的,這也就是我們剛才看到的JSESSIONID,我們通常情是看不到JSESSIONID的,但是當我們把瀏覽器的cookie禁止後,web伺服器會採用URL重寫的方式傳遞Sessionid,我們就可以在地址欄看到sessionid=KWJHUG6JJM65HS2K6之類的字元串。
明白了原理,我們就可以很容易的分辨出persistent cookies和session cookie的區別了,網上那些關於兩者安全性的討論也就一目瞭然了,session cookie針對某一次會話而言,會話結束session cookie也就隨著消失了,而persistent cookie只是存在於客戶端硬碟上的一段文本(通常是加密的),而且可能會遭到cookie欺騙以及針對cookie的跨站腳本攻擊,自然不如session cookie安全了。
通常session cookie是不能跨窗口使用的,當你新開了一個瀏覽器窗口進入相同頁面時,系統會賦予你一個新的sessionid,這樣我們信息共享的目的就達不到了,此時我們可以先把sessionid保存在persistent cookie中,然後在新窗口中讀出來,就可以得到上一個窗口SessionID了,這樣通過session cookie和persistent cookie的結合我們就實現了跨窗口的session tracking(會話跟蹤)。
在一些web開發的書中,往往只是簡單的把Session和cookie作為兩種並列的http傳送信息的方式,session cookies位於伺服器端,persistent cookie位於客戶端,可是session又是以cookie為基礎的,明白的兩者之間的聯系和區別,我們就不難選擇合適的技術來開發web service了。
② php rpc好用嗎,有什麼優缺點php rpc框架哪個好
什麼是RPC框架? 如果用一句話概括RPC就是:遠程調用框架(Remote Procere Call)那什麼是遠程調用?通常我們調用一個php中的方法,比如這樣一個函數方法: localAdd(10, 20),localAdd方法的具體實現要麼是用戶自己定義的,要麼是php庫函數中自帶的,也就說在localAdd方法的代碼實現在本地,它是一個本地調用!遠程調用意思就是:被調用方法的具體實現不在程序運行本地,而是在別的某個遠程地方。
遠程調用原理
比如 A (client) 調用 B (server) 提供的remoteAdd方法:
首先A與B之間建立一個TCP連接;
然後A把需要調用的方法名(這里是remoteAdd)以及方法參數(10, 20)序列化成位元組流發送出去;
B接受A發送過來的位元組流,然後反序列化得到目標方法名,方法參數,接著執行相應的方法調用(可能是localAdd)並把結果30返回;
A接受遠程調用結果,輸出30。
RPC框架就是把我剛才說的這幾點些細節給封裝起來,給用戶暴露簡單友好的API使用。
遠程調用的好處
解耦:當server需要對方法內實現修改時,client完全感知不到,不用做任何變更;這種方式在跨部門,跨公司合作的時候經常用到,並且方法的提供者我們通常稱為:服務的暴露。
RPC與Socket有什麼區別?
通過上面的簡單闡述,好像RPC與Socket 好像啊。都是調用遠程的方法,都是client/server模式,我之前也寫了一篇文章: 細說socket 那他們有啥區別呢?
RPC(遠程過程調用)採用客戶機/伺服器模式實現兩個進程之間相互通信。socket是RPC經常採用的通信手段之一,RPC是在Socket的基礎上實現的,它比socket需要更多的網路和系統資源。除了Socket,RPC還有其他的通信方法,比如:http、操作系統自帶的管道等技術來實現對於遠程程序的調用。微軟的Windows系統中,RPC就是採用命名管道進行通信。
RPC與REST有什麼區別?
通過了解RPC後,我們知道是RPC是client/server模式的,調用遠程的方法,REST也是我們熟悉的一套API調用協議方法,它也是基於client/server模式的,調用遠程的方法的,那他倆又有啥區別呢?
REST API 和 RPC 都是在 Server端 把一個個函數封裝成介面暴露出去,以供 Client端 調用,不過 REST API 是基於HTTP協議的,REST致力於通過http協議中的POST/GET/PUT/DELETE等方法和一個可讀性強的URL來提供一個http請求。而 RPC 則可以不基於 HTTP協議
因此,如果是後端兩種語言互相調用,用 RPC 可以獲得更好的性能(省去了 HTTP 報頭等一系列東西),應該也更容易配置。如果是前端通過 AJAX 調用後端,那麼用 REST API 的形式比較好(因為無論如何也避不開 HTTP 這道坎)。
php中流行的rpc框架有哪些
既然php是世界上最好的語言,那php中流行的RPC框架有哪些呢?
先列舉下: phprpc,yar, thrift, gRPC, swoole, hprose
因為時間和精力有限,不可能一個一個的去學習和使用,我選幾個世面上用的最多的幾個用下吧。因為RPC原理是一樣的,都是Client/Server模式,只是每個框架的使用方式不一樣而已。
③ xxtea zip 加密怎麼解開
針對sqlite資料庫文件,進行加密。現有兩種方案如下:
1.對資料庫中的數據進行加密。
2.對資料庫文件進行加密
1.uin怎麼獲取看
這個uin不是登錄的帳號,而是屬於內部的、程序界面上不可見的一個編號。
至於查看,最簡單的方法就是登錄web微信後,按F12打開網頁調試工具,然後ctrl+F搜索逗uin地,可以找到一串長長的URL,裡面的uin就是當前登錄的微信的uin。
還
有一種方法就是配置文件里,導出的微信目錄下有幾個cfg文件,這幾個文件里有保存,不過是java的hashmap,怎麼解析留給小夥伴們自己琢磨吧,
還有就是有朋友反應退出微信(後台運行不叫退出)或者注銷微信後會清空這些配置信息,所以小夥伴們導出的時候記得在微信登陸狀態下導出。博主自己鼓搗了一
個小程序來完成解析。
2.一個手機多個登錄帳號怎麼辦(沒有uin怎麼辦)
根
據博主那個解密的帖子,必須知道串號和uin。串號好說,配置中一般都有可以搞到,uin從配置中讀取出來的時候只有當前登錄的或者最後登錄的,其他的幾
個記錄都沒辦法解密。網上某軟體的解決方法是讓用戶一個一個登錄後再導出。這個解決方法在某些情況下是不可能的,或者有時候根本不知道uin。
後來經過一個朋友的指點,博主終於發現了解決方法,可以從配置中秒讀出來這個uin,這個方法暫時不透漏了,只是說明下這個異常情況。
3.串號和uin怎麼都正確的怎麼還是沒辦法解密
先
說說串號這個玩意,幾個熱心的朋友反饋了這個問題,經過博主測試發現不同的手機使用的不一定是IMEI,也可能是IMSI等等,而且串號也不一定是標準的
15位,可能是各種奇葩,比如輸入*#06#出來的是一個,但是在微信程序里用的卻是另一個非常奇葩的東西,這種情況多在雙卡雙待和山寨機中出現,經過嚴
格的測試,現在已經能做到精確識別,那幾位熱心的朋友也贈與了不同的代碼表示鼓勵。
4.計算出來了正確的key為什麼無法打開資料庫文件
微
信這個變態用的不是標準的sqlite資料庫,那個帖子也提到了不是資料庫加密,是文件的內容加密,其實是sqlcipher。官方上竟然還賣到
149$,不過倒是開放了源碼,水平夠高的可以自己嘗試編譯。google還能搜索到sqlcipher for
windows這個很好編譯,不過博主不知是長相問題還是人品問題,編譯出來的無法打開微信的資料庫,後來改了這份代碼才完成。
5.資料庫文件內容是加密的,怎麼還原
這
個是某些特殊情況下用到的,比如聊天記錄刪除了資料庫中就沒了,但是某個網友測試說資料庫無法查詢出來了,但是在文件中還是有殘留的。這個情況我沒測試
過,不過想想感覺有這個可能,就跟硬碟上刪除了文件其實就是刪除了文件的硬碟索引,內容還是殘留在硬碟上可以還原一樣,sqlite資料庫刪除的條目只是
抹去了索引,內容還存在這個文件中。
網上的都是直接打開讀取,並沒有解密還原這個文件成普通的sqlite資料庫,使用sqlcipher
的導出方法也只是將可查詢的內容導出。後來博主花了時間通讀了內容加密的方式,做了一個小程序將加密的文件內容直接解密,不操作修改任何數據,非資料庫轉
換,直接數據流解密,完全還原出來了原始的未加密的資料庫文件,大小不變,無內容損失,可以直接用sqlite admin等工具直接打開。
6.已經刪除的聊天內容可以恢復么
通過上述第5的方式還原出原數據後,經測試可以恢復。sqlite的刪除並不會從文件中徹底刪掉,而是抹掉索引,所以可以通過掃描原始文件恢復。前提是沒有重裝過微信。。。
兩種加密方式的優缺點,比較如下:
一、對資料庫中的數據進行加密
優點:
1.實現數據加密快速,只需添加兩個方法
一是:對明文數據進行加密返回密文數據
二是:對密文數據進行解密返回明文數據
2.程序無需進行太大變動,僅在對數據進行添加,修改,刪除,查詢時。針對指定的表欄位進行修改進行加密,解密的欄位即可。
不足:
1.由於對數據進行了加密。所以為了看到明文,必須密文進行解密。因此會增加處理器的消耗。因終端手機的處理能力有限,可能會出現處理數據緩慢的現象發生。
2.僅僅對數據進行了加密,還是可以看到數據表的sql語句,可能猜測到表的作用。另外,如果沒有對一個表中的所有欄位加密,則可以看沒有加密的明文數據。
需要做的工作:
1.無需考慮平台差異性,qt,android,ios都能快速的實現。只需在每個平台上,使用各自的語言,實現同樣的加密,解密演算法即可。
2.需要對加密演算法進行了解,選擇一種加密演算法,進行實現。
二、對資料庫文件進行加密
優點:
1.對整個文件進行了加密,用戶通過編輯器看不到任何有用的數據,用戶使用sqlite browser軟體也無法打開文件查看數據,保證了數據安全。
2.進行打開資料庫時,使用程序sqlite3_key(db,地********地,8);即可對文件解密,對數據表的操作無需進行加密,採用明文即可。
不足:
1.需要修改sqlite的源代碼,這個工作難度比較大。
2.需要對修改後的sqlite進行編譯,需要對makefile有所了解,手動編寫makefile文件,對源程序進行編譯。因平台差異性,可能會造成某個平台無法編譯生成動態鏈接庫的可能。
3.需要對數據訪問層代碼進行修改,例如qt平台需要將以前對資料庫操作使用的QSqlQuery類,更改為使用sqlite3.h文件中定義操作,對資料庫操作。其他平台也一樣,都要做這一步的修改。
4.在程序編譯時,要加入使用加密的動態鏈接庫(linux為共享庫.so文件)windows平台最容易,只需將所使用的dll文件到應用程序中即可。其他平台需要實驗,看如何引入庫,如果編譯。
需要做的工作:
1.修改sqlite源代碼,追加對資料庫文件進行加密的功能。
2.編譯含有加密功能的程序源代碼,生成各自平台需要使用的庫文件。
3.將加密sqlite庫文件引入各自平台中,修改資料庫訪問層代碼。
4.進行程序的部署,測試。
三、資料庫加密原理
目前主流的資料庫都採用了各種安全措施,主要包括用戶認證、訪問控制、數據加密存儲和資料庫操作審計等措施。
用戶認證:用戶或者程序向資料庫提供自己的有效身份證明,資料庫鑒別用戶的身份是否合法,只有合法的用戶才能存取數據
庫中的數據。用戶認證是所有安全機制的前提,只有通過認證才能進行授權訪問和審計。
訪問控制:資料庫管理系統為不同的用戶分配不同的許可權,保證用戶只能進行授權的訪問。目前,一些大型資料庫(如Oracle 等)
都採用了基於角色的訪問控制機制,即為用戶授予不同的角色,如db—owner,security administrator 等,不同的角色允許對資料庫執行不同的操作。
資料庫加密:用戶認證以及訪問控制對訪問資料庫進行了控制,但攻擊者可能會利用操作系統或資料庫漏洞,或物理接觸計算機,而直接接觸資料庫系統文件,從而可能繞過身份認證和存取控制而直接竊取或篡改資料庫內容。對資料庫中的數據進行加密是防範這類威脅的有效手段。
資料庫操作審計:監視和記錄用戶對資料庫所做的各種操作的安全機制,它記錄並存儲用戶的操作,用於事後分析,以檢查導致資料庫現狀的原因以及提供追蹤攻擊者的線索。資料庫的備份與恢復:當資料庫發生不可恢復的故障時,可以將資料庫恢復到先前的某個一致性的狀態。
四、SQLite 加密
由於SQLite 是開放源碼的,並且在其源碼中預留了加密介面,我們可以通過實現其預留的加密介面實現口令認證和資料庫加密以完善其加密機制。
1.口令認證
SQLite 資料庫文件是一個普通文本文件,對它的訪問首先依賴於文件的訪問控制。在此基礎上,再增加進一步的口令認證,即在訪問資料庫時必須提供正確的口令,如果通過認證就可以對資料庫執行創建、查詢、修改、插入、刪除和修改等操作;否則,不允許進一步的訪問。
2.資料庫加密
資料庫加密有兩種方式:
1)在資料庫管理系(Data Base Management System,DBMS)中實現加密功能,即在從資料庫中讀數據和向資料庫中寫數據時執行加解密操作;
2)應用層加密,即在應用程序中對資料庫的某些欄位的值進行加密,DBMS 管理的是加密後的密文。
前者與DBMS 結合好,加密方式對用戶透明,但增加了DBMS 的負載,並且需要修改DBMS的原始代碼;後者則需要應用程序在寫入數據前加密,在讀出數據後解密,因而會增大應用程序的負載。在此,通過實現SQLite 源碼中預留的加密介面,實現DBMS 級的加密。
3.使用xxx-tea 演算法加密SQLite 資料庫
微型加密演算法(TEA)及其相關變種(XTEA,Block TEA,XXTEA) 都是分組加密演算法,它們很容易被描述,實現也很簡單(典型的幾行代碼)。
TEA 演算法最初是由劍橋計算機實驗室的 David Wheeler 和 Roger Needham在 1994 年設計的。該演算法使用
128 位的密鑰為 64 位的信息塊進行加密,它需要進行 64 輪迭代,盡管作者認為 32
輪已經足夠了。該演算法使用了一個神秘常數δ作為倍數,它來源於黃金比率,以保證每一輪加密都不相同。但δ的精確值似乎並不重要,這里 TEA 把它定義為
δ=「(√5 – 1)231」(也就是程序中的 0×9E3779B9)。
之後TEA 演算法被發現存在缺陷,作為回應,設計者提出了一個 TEA 的升級版本——XTEA(有時也被稱為逗tean地)。XTEA 跟
TEA 使用了相同的簡單運算,但它採用了截然不同的順序,為了阻止密鑰表攻擊,四個子密鑰(在加密過程中,原 128 位的密鑰被拆分為 4 個 32
位的子密鑰)採用了一種不太正規的方式進行混合,但速度更慢了。
在跟描述 XTEA 演算法的同一份報告中,還介紹了另外一種被稱為 Block TEA 演算法的變種,它可以對 32
位大小任意倍數的變數塊進行操作。該演算法將 XTEA
輪循函數依次應用於塊中的每個字,並且將它附加於它的鄰字。該操作重復多少輪依賴於塊的大小,但至少需要 6
輪。該方法的優勢在於它無需操作模式(CBC,OFB,CFB 等),密鑰可直接用於信息。對於長的信息它可能比 XTEA 更有效率。
在1998 年,Markku-JuhaniSaarinen 給出了一個可有效攻擊 Block TEA 演算法的代碼,但之後很快 David
J. Wheeler 和 Roger M.Needham 就給出了 Block TEA 演算法的修訂版,這個演算法被稱為 XXTEA。XXTEA
使用跟 Block TEA 相似的結構,但在處理塊中每個字時利用了相鄰字。它利用一個更復雜的 MX 函數代替了 XTEA 輪循函數,MX 使用 2
個輸入量。
④ lua腳本加密用xxtea解密了還是密文
這說明它用的不是標准版本,是在lua原代碼基礎上變通後的產物。
⑤ PHP文件錯誤:Parse error
錯誤信息的全文是:
Parse
error:
parse
error,
unexpected
$end
in
E:\ygb\a.php
on
line
37
意思是}不匹配,查看文件差四個}
應該在最後一行之前添加下面的內容:
}
}
}
}
⑥ java 中 url地址欄里傳的數字值,如何加密
現在很多加密演算法的 比如你可以使用XXTea加密。前端使用post請求,請求之前將你要傳的參數 組合成一個json格式,之後進行XXTea加密,加密完之後 將加密得到的字元串放到post 請求數據中。後台加一個攔截器,拿到你的請求地址以及加密字元串,然後將字元串解密 得到一個map,再通過request得到的ParamRequestWrapper 將解密後的參數放回去,這樣你的方法就可以照常拿到數據了。
⑦ 怎麼用lua compile對lua腳本加密
cmd運行命令:
cocos luacompile -s src/ -d out/ -e -k testKey123456 -b testSign12345 --disable-compile
提示:
D:\zm\Test>cocos luacompile -s src/ -d out/ -e -k testKey123456 -b testSign12345 --disable-compile
通過 luacompile 命令對 lua 文件進行 XXTEA 加密以及編譯為位元組碼的處理。
編譯為位元組碼的功能基於 LuaJIT v2.0.3,所以目前編譯成位元組碼的文件不適用於 iOS 64
位設備。
正在處理 lua 文件。
編譯完成。
編譯成功:我把 out 目錄的名字換成了 src ,原 src 目錄改名叫 src_org
vs 中 加入 這一句:
stack->setXXTEAKeyAndSign("testKey123456", strlen("testKey123456"), "testSign123456", strlen("testSign123456"));
⑧ PHP的xxtea加密演算法問題
xxtea 的密鑰長度128bit,塊長度不定, 是32bit的倍數。
PHP做位運算要小心。整形有符號,會自動轉換成浮點,要控制好范圍。