共计 804 个字符,预计需要花费 3 分钟才能阅读完成。
介绍一下问题的背景:
本人一枚小小 PHPer,有一天公司的 Java 找到我,让我帮忙写一个接口的 Demo,心想:‘最喜欢写接口了,来来来来!’,于是 Java 就带着 Java 版 Demo 来了, 大概看了一遍, 具体涉及以下几点:
md5 加密:
java 中定义 hashMap,储存 userid,再使用 toJSONString 将其转换成 Json 串,再将 Json 使用 md5Hex 加密,再放入 hashMap 中
map 参数格式转换:
将 map 中的数据转换成 String,对 key,value 进行数据拼接,拼接成字符串,此字符串具体要求如下:‘按照参数名 ASCII 码从小到大排序,使用 URL 键值对的格式(即 key1=value1&key2=value2…)构造成字符串 signPlainText’
hash_hmac 签名验证:
这个没什么说的,PHP 中有 hash_hmac 函数
谈论一下遇到的坑:
本 PHPer 比较渣渣,不知道 Java 中的 hashMap 是用来做啥的,但我知道,它最后做了一件事:JSONObject.toJSONString(body),没错,转换成字符串了,所以有了以下代码:(不负责的贴图, 不知道正确与否)
Java 版
Map<String, String> body = new HashMap<>();
body.put(“userId”, userId);
//post 请求 body 为 json 格式,将 json 格式进行 md5 加密
String postBody = JSONObject.toJSONString(body);
String bodyMd = DigestUtils.md5Hex(postBody);
PHP 版
$body = [“userId”=>$userId];
$postbody = json_encode($body);
$bodyMd = md5($postbody);
上边我们之间应该是在做一件事请吧?应该是的,反正都是转成了 Json,转成了 Md5