java反序列化 PHPSerializer 序列化的對象參數描述

maven 引用的包

<!--反序列化 php-->
 <dependency>
     <groupId>org.sction</groupId>
     <artifactId>phprpc</artifactId>
     <version>3.0.2</version>
 </dependency

主要的操作方法:

	
	public static Map<String, Object> getUnserializeMap(String content) throws Exception {
		Map<String, Object> list = new HashMap<String, Object>();
	    PHPSerializer p = new PHPSerializer();
	    if (StringUtils.isEmpty(content))
	        return list;
	    AssocArray array = (AssocArray) p.unserialize(content.getBytes());
	    for (int i = 0; i < array.size(); i++) {
	    	Map<String, Object> t = (Map) Cast.cast(array.get(i), Map.class);
	        list.putAll(t);
	    }
	    return list;
	}
	
	
	/**
	 * 對java 對象序列化
	 * @param obj
	 * @return
	 */
	public static String PHPSerialize(Object obj) {
		try {
			PHPSerializer p = new PHPSerializer();
			byte[] b = p.serialize(obj);
			return new String(b);
		} catch (Exception e) {
			log.error("==php序列化失敗==", e);
		} 

		return "";
	}

上示例:

	public static void main(String[] args) throws Exception {
		 List<Map<String, Integer>> list = new ArrayList<Map<String,Integer>>();
		 Map<String, Integer> map = new HashMap<String, Integer>();
		 map.put("test1", 1);
		 list.add(map);
		 map = new HashMap<String, Integer>();
		 map.put("test2", 2000);
		 list.add(map);
		 System.out.println(PHPSerialize(list));
	 
		 
		 
		 List<Map<String, String>> list1 = new ArrayList<Map<String,String>>();
		 Map<String, String> map2 = new HashMap<String, String>();
		 map2.put("test1", "1");
		 list1.add(map2);
		 map2 = new HashMap<String, String>();
		 map2.put("test2", "2000");
		 list1.add(map2);
		 System.out.println(PHPSerialize(list1));
		  
	}

由兩個 List<Map> 的對象數據  但是map的類型不同輸出的結果有差別

輸出如下:

a:2:{i:0;a:1:{s:5:"test1";i:1;}i:1;a:1:{s:5:"test2";i:2000;}}
a:2:{i:0;a:1:{s:5:"test1";s:1:"1";}i:1;a:1:{s:5:"test2";s:4:"2000";}}

這裏我們可以得出結論 隨着map的類型的變化  i:2000; 和 s:4:"2000";  這個的結構也會變  那麼i其實對應的是php裏的整型而s 代表的是字符型 s後面的值是字符的長度

示例二:

public static void main(String[] args) throws Exception {
 
		 String content = "a:1:{i:0;a:1:{s:33:\"3839914ceb851278cb14a5ab7364e9ec0\";i:1;}}";
		 System.out.println(getUnserializeMap(content));
	}

這裏可以將   String content = "a:1:{i:0;a:1:{s:33:\"3839914ceb851278cb14a5ab7364e9ec0\";i:1;}}" 字符轉成map結構

輸出: {3839914ceb851278cb14a5ab7364e9ec0=1}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章