DES CBC 加解密

package com.emodor.attendance.utils;

import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;
import javax.crypto.spec.IvParameterSpec;
public class DESUtil {
	private  static byte[] IV = { 0, 0, 0, 0, 0, 0, 0, 0 };// 設置向量
	
	/**
	 * DES/CBC加密
	 * @param src
	 * @return
	 * @throws Exception
	 */
	public static String encrypt(String src,  String key ) throws Exception {
		 DESKeySpec ks = new DESKeySpec(key.substring(0, 8).getBytes("UTF-8"));
		 SecretKeyFactory skf = SecretKeyFactory.getInstance("DES");
		 SecretKey sk = skf.generateSecret(ks);
		 Cipher cip = Cipher.getInstance("DES/CBC/PKCS5Padding");
		 IvParameterSpec iv2 = new IvParameterSpec(IV);
		 cip.init(Cipher.ENCRYPT_MODE, sk, iv2);
		 String dest = byteToHex(cip.doFinal(src.getBytes("UTF-8")));
		return dest;
	}
	

	/**
	 * DES/CBC解密
	 * @param src
	 * @return
	 * @throws Exception
	 */
	public static byte[]  decrypt(String src, String key) throws Exception {
		 byte [] attribute = hexToByte(src);
		 DESKeySpec ks = new DESKeySpec(key.substring(0, 8).getBytes("UTF-8"));
		 SecretKeyFactory skf = SecretKeyFactory.getInstance("DES");
		 SecretKey sk = skf.generateSecret(ks);
		 Cipher cip = Cipher.getInstance("DES/CBC/PKCS5Padding");
		 IvParameterSpec iv2 = new IvParameterSpec(IV);
		 cip.init(Cipher.DECRYPT_MODE, sk, iv2);
		 byte [] ret = cip.doFinal(attribute);
		 return ret;
	}


	/**
     * byte數組轉hex
     * @param bytes
     * @return
     */
    public static String byteToHex(byte[] bytes){
        String strHex = "";
        StringBuilder sb = new StringBuilder("");
        for (int n = 0; n < bytes.length; n++) {
            strHex = Integer.toHexString(bytes[n] & 0xFF);
            sb.append((strHex.length() == 1) ? "0" + strHex : strHex); // 每個字節由兩個字符表示,位數不夠,高位補0
        }
        return sb.toString().trim();
    }
    
    /**
     * hex轉byte數組
     * @param hex
     * @return
     */
    public static byte[] hexToByte(String hex){
        int m = 0, n = 0;
        int byteLen = hex.length() / 2;
        byte[] ret = new byte[byteLen];
        for (int i = 0; i < byteLen; i++) {
            m = i * 2 + 1;
            n = m + 1;
            int intVal = Integer.decode("0x" + hex.substring(i * 2, m) + hex.substring(m, n));
            ret[i] = Byte.valueOf((byte)intVal);
        }
        return ret;
    }
    
    public static void main(String[] args) {
    	DESUtil util = new DESUtil();
    	String dto = "{\"Count\":1,\"logs\":[{\"sn\":\"smz-kqkjg1\",\"user_id\":\"200100034\",\"recog_time\":\"2019-09-12 11:11:11\",\"recog_type\":\"iris\"}]}";
    	try {
    		String to = util.encrypt(dto,"drNxEm50");
			System.out.println("加密"+to);
			byte[] to1 = util.decrypt(to,"drNxEm50");
			System.out.println("解密"+new String(to1));
		} catch (Exception e) {
			System.out.println("異常");
			e.printStackTrace();
		}
    }
}
public static void main(String[] args){
		String seString = "{userType=1, dev_mac=smz-cjkjg, RegType=3}".replace("=", ":");
		String seString2 = "\"Result\":1,\"Content\":\"\",\"Msg\":\"沒有獲取到待刪除的人員信息.\"";
		Gson gson = new Gson();
		Map<String, Object> map = new HashMap<String, Object>();
		map = gson.fromJson(seString, map.getClass());
		System.out.println(map);
		
		ProjectWorkerRelationDTO resultDto = gson.fromJson(seString, ProjectWorkerRelationDTO.class);
		System.out.println(resultDto.getUserType());
		
		String uudString = "{\"Result\":0,\"Content\":\"ED2FEA1624530BD266FA56EEE1697F26D6F49FE773358938089655F6F6725F6F4FF9EB83948BC37D74F3C7C8C4E1BC76ED5FF9C760DF9B957B0D5239FBB1407AC93D12AA35C649035BAB7D4C3A66933E24F9C3D667F6B19E88C881E9AAAD466DD9D86796703BD08D05243582F95275C4CF300CF05CFBD27E13B78EBAAC4FE5127D6DBFEAE42A97451F44A5317216135746C453C9AE71DE82992C74DD425E0EC66CA263B543309853B9E747B674937D64526C2272F13498710211C70D8AB6E7F59E96AC5DD059FB5A4A49E0FCD73318298EE4621FD82768DA449B8EA5342F296977FEFEDCD87BB694EE585C7CD3166183211D2C9CAFEA95D4AC6E7BD0C37F506C6793CE487786B63480BF80C9BD39A6580D5A0CDFF8DE1C1ABB62ACAA63B11F837B56933E265F4085ADDA2D1AF9733CEFA0D256D04E0E1ACF5E11B5C685E03EFE149A046BB474D46C89101E206EB7E5BFFA875CFB1AD37346624B8CCFC7C530A3A1FCB68F6F28F26FAE34E325435B7264B5D7342D5E7CE9E20CEDBC276EA2FD806442A6D49C1118406ADFAAA26DF22CB726138FAC51CE8DE76687A9D0ECED38BD868B3354B795914E91CFE28C1F45F3F744D3EF9CCCB748B0E1D57903916E115BFFFDF9D0BB22745CCB2E10F8E0DC30829CDE341E653EB456AAC0C441CF31010B746816A28325D106EF965DC572A613D2A9B1779657687255FEF68E8BE825C1BC7CC121F58E8F76D35F37360EA795A10C742AB5D7AD878DE3BB857EC61E7EE87E7CE26D7BCB9075FA3B9F2C57C369989AD4C755E8AD3A0A73719B0E87F183E0AE4C996D5E32DFB553DD6980968A91899FF6AA022F015E5F5C35B53A71FFB4F2B7927D2A819B0803F444AAC6A9DC6EF59974791963BDE54C9107FE46A73C07939092B0E6075284A2272000BE05BF54377CBCFA73460B74474A878F77162DE63D8D406F24406C4AB7A18FD4360298DE034BE84F1C64047DA9D4AF21F0BFDB70FE59F49033AABCFCE8B5C4B60EFAD60E0371441D3264A9F64894377E55352827D41FF0FD372965263849A7A6ABCF1444C2A22227183A7B2EC9A833943D596A588B6C7CFE830A233EEC926E192FDEB8C187456313B46A1DB0C25DF99D3462BAD16B76C95B7034D8CC775DDB386F26417DB57F5528E67C397367EC395A48D8F1EE862C243F6803DAF49463C07B538DD0E666250DDCEAD9A6B0176B99B9C16EFC99806F850694CE244E07AC9D926040F25AF6C60E95F53E9E4C9F2149EBD784A282E53FEF4034A9613DC5EF64F2553A548D2BD0642FCAD7F1ECD6B39E55218313E3FB25D6655DB61D4364972F4EA4F585DDBC5BAE7DB1D6426A4633A800B35D9BF7F2975A97E9E7C8C149D6F02A34BB38C4676435F341BA3F7B38BDCF1EA2343CCD5D4AA955F16A117B6FF3407FC1978BD94BCF63BECDBE7CB4983DEA21EB9B36780087343A6C493D7285BB803217ED4E392F9ABE444ED040C9B239A85041BB3F588C36E1B9942586EC663285ED1850D7A4632F89035BB5AB4BA9F73E49AAB91DEDB5839484EF1A729DC7396F66259F8FDED32D75ADA2D3A4A585ADB57EC711251A9EE92A69F5C2A8636B789B5A33B92D3EF21E7C8FF509ED47A7EC852EDA584CF90944E534E8F99B8199F34DAAF3F2FD5CDE6D29EE021E2EFC8158ABBDD5320D52A485567295365FA0414BA09F504DB0EA1CB95F3EF77760602CA5F91CA11DFAA4CE3C07E20F8561060099215729C623802C90BDF4FC83BF33DEE85AE4E6FCBA1E8001CDC4BE8DB2D882733C8BC3C81DE45DBB60B5F8F1F982A53DC87C9250E91B8EF2C90CB4633CDAC98940B0330B5E62D2A013F463AE6D5385114A6976DD7F30F102A462EAEBDBA414B642ADF37D34FB1C91930F53E1A050E91AF3D47C78ABAF61E8463F3155826B721B77A03E16B98662E8E3C1FC284FAD422BFD835891AEB7C9BF9713E7D4A31F34A95496D22AEF30D6029A0D5D8DEB6BF759C7E0C092306DFE104B4907EB80C3BCBE49FF51C0EFE19426E395AD0DEA91DE4920D054D84309247F4F96F0D72738F9C22028B8F31FDBCBC089E43692D9BC3AA07D9779D2C37658B307239D51EA0201ADC44CD96E71B5F4A0F8F315B9E8C600AC8C6DCE4F234C70807FE5F7CBCA1E0FB31A672128585FAF567F489BCC1598EEB5549CCBE978191F6322C6C4482AEF02A24594BC21B61D1C81926E5BD1278BCFED187EC633A0737150293BB7AEA83B4BC0E65164D8A50ED3621B0410BDF017EEC802B0F027007FEFF88278FFDA75FA67C00D5EBC5EB8C9EC49DE695E6634660AC14C32D87E4A1BBC8C6F9C62E15CEE64E297AD4E802EAAF8FFDF303FFD1D3FAE3232D69655D37BC1C530E4570554E327E66ABE48A5693F5C28D3508EC9343E9BDF09ED47207B0C60DAEC879DBE7E4B3554D4826ECD0B291A61E6A103D0BF2971ADBAAED009E2D99A5D7DA2FA273D52D8EC8FE76197EFAB2359FA7DFDCFD757FB617BF0414883D659068EC1643192CCE47BFDC6E4CFB6B589519C5AE6D2A1396604BFD4385A59650A3F9A01067B761C8C110E018FA6C28F97853D6A519FC8F1603CD91E7B6A6321EA59CD90E197AD87024FE12128190B7E3CFED3B11858936E3E6DBB2571268D31CD612470D2720C9F55DCD24E907836D58E4967C116AD9CA9351326E8F67B85B71A73FF47DD5C3058322B74F5A7F12BC8AE41A374748796134B32F1E45EB51EE957607DAC4889C21631B664BA4F02D11555689183DAF6EE129CB906DFF2378E2C4F0693715FAE152A655C7D1DB141F2597816D5CCF66D2542FB32FD10D1D31AC93388C80D018B33B721AE1E72E70526DCA272F7AF76AD57F0ACBDD1B002C633BA619909A8585143830DEB6E927D8ACB994A68B8867654E09B464CFDF5B3D2CBDE396CC728B3EB1E67D45404E3072ADAB6220749446378EAFC566EBFCA285FA903186E72EAEEDB0C381A9EC95B5689A26AB2C5FD2D129A00C5B3D9FD42E70B938D36464682B71D73B71D2AA7826B3200A14A7ECE65B480EEB4F382CFE38B5F823CE9B0859D1A20A1C117B4E24775EC030930CC7B4C8BDA66F320E73D60DF22C63F2919925AA08B914546DB125F46828C7ED0155545DE98E6225DEC9F4C022AD54258EE7A5DC33BC01C26EC039164E0F891AE0DC2B13137D3B0091C9C12DC4214D373E9CFAD4170DE74C6FE2C2F2D0DED223A2AE13E74B944723C4550B0ADCAF3D9643617E867410AC5AE34B10CC6BF4A1F69B9EBBBD9CEA6996233\",\"Msg\":\"成功\"}";
		ProjectWorkerRelationDTO resultDto1 = gson.fromJson(uudString, ProjectWorkerRelationDTO.class);
		try {
			byte[] content = DESUtil.decrypt(resultDto1.getContent(), "密鑰");
			//String name = new String(content).replace("[", "").replace("]", "");
			List<ProjectWorkerRelationDTO> projectWorke = new ArrayList<ProjectWorkerRelationDTO>();
			JSONArray jsonArray = JSONArray.fromObject( new String(content));
			System.out.println(jsonArray);
			for(int i=0;i<jsonArray.size(); i++){
				JSONObject jsonJ = jsonArray.getJSONObject(i);
				String dataname = jsonJ.getString("name");
				ProjectWorkerRelationDTO result  = new 	ProjectWorkerRelationDTO();
				result.setName(dataname);
				projectWorke.add(result);
			}
			
			List<ProjectWorkerRelationDTO> list= gson.fromJson(new String(content), new TypeToken<List<ProjectWorkerRelationDTO>>() {}.getType());
			for (ProjectWorkerRelationDTO person1 : list) {
				System.out.println(person1.getName() + person1.getUserId());
				}
			JSONObject personObject = JSONObject.parseObject(result);
			Object code = personObject.get("errcode");
			BaseResultDTO<SimpleResultData> dto = new BaseResultDTO<SimpleResultData>();
			dto.setErrcode(code.toString());
			System.out.println(code);
			//清楚字符串中到符號
			ProjectWorkerRelationDTO dto =  gson.fromJson(name.replace("]", ""), ProjectWorkerRelationDTO.class);
			
			//JSON數據中取值
			List<ProjectWorkerRelationDTO> list= gson.fromJson(new String(content), new TypeToken<List<ProjectWorkerRelationDTO>>() {}.getType());
		} catch (Exception e) {
			System.out.println("錯誤");
			e.printStackTrace();
		}
		
	}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章