/
加密代码示例

加密代码示例

PHP 加密代码示例

 

class PhpExampleCode{ private static function checkMD5($request): bool { $key = ‘secretKey'; $data = $request->except('hash'); $string = ''; ksort($data); foreach ($data as $k => $v) { if (is_array($v)) { $v = json_encode($v, JSON_UNESCAPED_SLASHES); } $string .= $k . '=' . $v . '&'; } // unicode string replace $string = preg_replace_callback('/\\\\u([0-9a-fA-F]{4})/', function ($match) { return mb_convert_encoding(pack('H*', $match[1]), 'UTF-8', 'UCS-2BE'); }, $string); return $request->hash === md5(Str::replaceLast('&', $key, $string)); } }

C# 加密代码示例

 

class Program { static void Main(string[] args) { Dictionary<String, dynamic> dict = new Dictionary<string, dynamic>(); dict.Add("param1", 1); dict.Add("param3", new string[] { "a1", "a2" }); dict.Add("param2", "param2"); Console.WriteLine(EncryptString(ExceptHashAndSort(dict) + "1234")); } public static String ExceptHashAndSort(Dictionary<string, dynamic> requestDict) { requestDict.Remove("hash"); Dictionary<String, dynamic> sortedDict = requestDict.OrderBy(o => o.Key).ToDictionary(o => o.Key, p => p.Value); String plain = ""; foreach(KeyValuePair<string, dynamic> dict in sortedDict){ plain += dict.Key + "="; if (dict.Value is Array) { plain += System.Text.Json.JsonSerializer.Serialize(dict.Value); } else { plain += dict.Value; } plain += "&"; } return plain.Substring(0, plain.Length - 1); } public static string EncryptString(string str) { // Console.WriteLine(str); MD5 md5 = MD5.Create(); // Convert String to byte array byte[] byteOld = Encoding.UTF8.GetBytes(str); // Call encryption method byte[] byteNew = md5.ComputeHash(byteOld); // Convert the encrypted result into a string StringBuilder sb = new StringBuilder(); foreach (byte b in byteNew) { // Convert bytes into hexadecimal character string sb.Append(b.ToString("x2")); } // Return the encrypted string return sb.ToString(); } }

Java 加密代码示例

1. HashExampleCode 类

package com.example.demo.util; import java.util.List; import java.util.Map; import java.util.TreeMap; import com.example.demo.util.MD5Util; import org.springframework.util.StringUtils; public class HashExampleCode { /** * sort the params. * * @param object * @return */ private static Map<String, Object> objToSortedMap(Object object) { Map<String, Object> objMap = JsonUtil.obj2Map(object); Map<String, Object> sortedMap = new TreeMap<>(); for (Map.Entry<String, Object> entry : objMap.entrySet()) { if (!StringUtils.isEmpty(entry.getKey()) && !entry.getKey().equals("hash")) { sortedMap.put(entry.getKey(), entry.getValue()); } } return sortedMap; } /** * get the Hash code from request * * @param object * @param secretKey * @return */ public static String getSign(Object object, String secretKey) { Map<String, Object> sortedMap = objToSortedMap(object); StringBuilder sb = new StringBuilder(); for (Map.Entry<String, Object> entry : sortedMap.entrySet()) { sb.append("&").append(entry.getKey()).append("="); if (entry.getValue() instanceof List) { sb.append(JsonUtil.object2Json(entry.getValue())); } else { sb.append(entry.getValue().toString()); } } String params = sb.toString().replaceFirst("&", ""); return MD5Util.MD5Encode(params + secretKey); } }

2. MD5Util 类

package com.example.demo.util; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; public class MD5Util { /** * @param origin * @return string */ private static final String[] hexDigits = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f"}; public static String MD5Encode(String origin) { try { MessageDigest md = MessageDigest.getInstance("MD5"); return byteArrayToHexString(md.digest(origin.getBytes())); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } return origin; } public static String byteArrayToHexString(byte[] b) { StringBuilder resultSb = new StringBuilder(); for (byte value : b) { resultSb.append(byteToHexString(value)); } return resultSb.toString(); } private static String byteToHexString(byte b) { int n = b; if (n < 0) { n += 256; } int d1 = n / 16; int d2 = n % 16; return hexDigits[d1] + hexDigits[d2]; } }

3. JsonUtil 类

package com.example.demo.util; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.ObjectMapper; import java.util.Map; import com.fasterxml.jackson.databind.ObjectMapper; class JsonUtil { private static final ObjectMapper mapper = new ObjectMapper(); static { mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); } public static Map<String, Object> obj2Map(Object obj) { return mapper.convertValue(obj, Map.class); } public static String object2Json(Object o) { if (o == null) { return null; } String s = null; try { s = mapper.writeValueAsString(o); } catch (Exception e) { e.printStackTrace(); } return s; } }

 

EG: { "brandId": 100, "requestId": "039c630b-10be-43c2-bba1-70c8e0290997", "playerId": "2", "playerSessionId": "71f88d44-bc76-42f3-b748-45e2709070e0", "gameCode": "bfb", "trans": [ { "seq": 1, "transId": "ptxia6xwasc75qksfswqkxd", "amount": 5, "transType": "bet", "transTime": "2023-08-24 07:21:20.434", "roundId": "789513231360", "roundType": "normal", "endRound": 0 } ] } 加密前的字符串是 brandId=100&gameCode=bfb&playerId=2&playerSessionId=71f88d44-bc76-42f3-b748-45e2709070e0&requestId=039c630b-10be-43c2-bba1-70c8e0290997&trans=[{"seq":1,"transId":"ptxia6xwasc75qksfswqkxd","amount":5,"transType":"bet","transTime":"2023-08-24 07:21:20.434","roundId":"789513231360","roundType":"normal","endRound":0}]mytestsecretkey

Related content