鍍金池/ 問答/Java  PHP/ 一個(gè)java的解密方法,如何用php實(shí)現(xiàn)啊,跪求大牛~

一個(gè)java的解密方法,如何用php實(shí)現(xiàn)啊,跪求大牛~

涉及到別人的代碼問題,故刪掉了源代碼

回答
編輯回答
柚稚

@Untitled 這位大哥,確實(shí)是這樣的,他這里有個(gè)坑人的地方就是他返回來(lái)的兩段字符串headbody,分別將headbody base64_decode(),然后只對(duì)head做RSA的解密,得到的RsaHeadbody拼接 ,再做gzdecode的解壓,我之前是想著先解壓,再把兩段拼接,沒想到,他是這樣的,后來(lái)我仔細(xì)看java的源碼才發(fā)現(xiàn)的。

2017年3月8日 14:35
編輯回答
忘了我

粗略看了一下,關(guān)鍵就三個(gè)東西

  1. RSA
  2. Base64
  3. gzip

把這三個(gè)的php庫(kù)找到就完事了

整理一下這個(gè)程序的流程:

  1. 將字符串參數(shù)data轉(zhuǎn)為JSON對(duì)象,使用變量json接收結(jié)果;
  2. json["d_head"]使用BASE64解碼,使用變量ecryptData(講道理應(yīng)該是“encrypt”吧?)接收結(jié)果;
  3. ecryptData使用RSA算法解密,使用變量datas接收;
  4. datas使用gzip解壓,使用變量b3接收;
  5. b3byteArray轉(zhuǎn)為T類型的對(duì)象,使用變量obj接收;
  6. 返回obj

你要做的是把上面的每一步都分別用php實(shí)現(xiàn),而不是試圖同時(shí)用php實(shí)現(xiàn)上面的所有步驟的總和。實(shí)現(xiàn)的時(shí)候,你可以將java版的算法的每一步的存儲(chǔ)運(yùn)算結(jié)果的變量,jsonecryptData、datasb3obj打印出來(lái),如果你實(shí)現(xiàn)的php版的算法的對(duì)于相同的輸入,每一步的輸出都和java版的一樣,那才算是重現(xiàn)成功了。你說(shuō)你無(wú)法解壓,那原因可能有兩個(gè):

  1. 解壓之前的步驟(步驟1、步驟2和步驟3)的結(jié)果(jsonecryptDatadatas)不正確;
  2. 你的解壓算法和java版的解壓算法有差異。

你只要保證,對(duì)于相同的輸入,你實(shí)現(xiàn)的php版本的算法得到的datas和java版本的算法得到的datas完全一致,且你實(shí)現(xiàn)的php版本的算法使用的解壓算法和java版本的算法使用的解壓函數(shù)行為完全一致,解壓的這一步就絕對(duì)不會(huì)出錯(cuò),且解壓后得到結(jié)果也是正確的。

2017年6月11日 18:02