首页 > 其他分享 >记录下踩map的坑

记录下踩map的坑

时间:2023-11-30 19:34:32浏览次数:22  
标签:map string 记录 fmt json Println md5

这两天新调个接口的时候,一直提示签名错误,但所需的时间,工号,token都是对的,完全没有头绪,卡了两天后,终于找到原因了

原因是我的校验信息,是要将时间,工号,token封装在一起成字符串,然后用md5加密后传过去,之前封装时一直用的map,而map是无序的,转换成字符串时顺序不定,而后再用md5加密出来的字符串,跟所需字符串就不一样了

详看代码:

package main

import (
    "crypto/md5"
    "encoding/hex"
    "encoding/json"
    "fmt"
    "time"
)

// 签名信息
type signa struct {
    ThirdTime   int    `json:"thirdTime"`
    ThirdCaller string `json:"thirdCaller"`
    ThirdToken  string `json:"thirdToken"`
}

func main() {
    //校验信息
    m := map[string]interface{}{
        "thirdTime":   int(time.Now().Unix() * 1000),
        "thirdCaller": "W9010315",
        "thirdToken":  "55sfew4sfsf5rerx8sfwxs5",
    }
    signJson, _ := json.Marshal(m)
    fmt.Println(string(signJson))
    // 计算MD5值
    md55 := md5.Sum(signJson)
    thirdSign := hex.EncodeToString(md55[:])
    fmt.Println(thirdSign)

    fmt.Println("########################")

    signs := signa{
        ThirdTime:   int(time.Now().Unix() * 1000),
        ThirdCaller: "W9010315",
        ThirdToken:  "55sfew4sfsf5rerx8sfwxs5",
    }
    //用MD5加密签名信息
    signJsons, _ := json.Marshal(signs)
    fmt.Println(string(signJsons))
    // 计算MD5值
    md555 := md5.Sum(signJsons)
    thirdSigns := hex.EncodeToString(md555[:])
    fmt.Println(thirdSigns)
}

输出结果如下,校验信息所需的字符串是0322那个,跟我用map加密出来的字符串完全不一样

{"thirdCaller":"W9010315","thirdTime":1701336910000,"thirdToken":"55sfew4sfsf5rerx8sfwxs5"}
92ef16ab18a81d0333dee9f01e456a05
########################
{"thirdTime":1701336910000,"thirdCaller":"W9010315","thirdToken":"55sfew4sfsf5rerx8sfwxs5"}
032225f312a4b6200df96bd8d2b41ee4

 

标签:map,string,记录,fmt,json,Println,md5
From: https://www.cnblogs.com/Xinenhui/p/17868088.html

相关文章

  • HashMap
    HashMap是一种非常重要的数据结构,它实现了Map接口,允许我们存储和检索键值对。HashMap使用哈希表作为其内部实现,通过哈希码来定位键值对。HashMap的内部实现:数据结构:HashMap内部使用一个数组实现,每个数组元素称为一个bucket。在默认情况下,HashMap的bucket大小为16。每个bucket可......
  • 多种数据库获取最近一天记录的SQL整理
    多种数据库获取最近一天记录的SQL整理背景纯粹当笔记.数据库种类太多,记不住,每次都需要现查,效率实在是太低了将获取最近一天记录的SQL整理好方便后续直接his用简单总结Oracle+DM+神通的语法一样Kingbase+PG+Highgo的语法一样MySQL用的是SUB其他人都是......
  • HashMap底层原理与扩容机制
    1.7数组+链表1.8数组+(链表|红黑树)JAVA1.8之后hashmap树化规则HashMap里面定义了一个常量TREEIFY_THRESHOLD=8,当链表长度超过树化阈值8时,先尝试调用resize()方法进行扩容来减少链表长度,如果数组容量已经>=64(MIN_TREEIFY_CAPACITY),才会进行树化,Node节点转为TreeNod......
  • log4j的日志信息记录maven
    本地调用三方包,日志信息很关键,log4j有多种日志级别Log4j有三个主要的组件:Loggers(记录器),Appenders(输出源)和Layouts(布局)。这里可简单理解为日志类别,日志要输出的地方和日志以何种形式输出。综合使用这三个组件可以轻松地记录信息的类型和级别,并可以在运行时控制日志输出的样......
  • java 8 利用lambda 获取 记录类(get/set) field 上面 注解
    packagetianrun.ziguan.api.center.alert.util;importcom.baomidou.mybatisplus.annotation.TableField;importjava.io.*;importjava.lang.annotation.Annotation;importjava.lang.invoke.SerializedLambda;importjava.lang.reflect.Field;importjava.lang.ref......
  • 关于layui使用弹出层模版后对应上传组件不工作的问题记录
    这里页面的聊天室是使用的弹出层:util.on('lay-on',{'open-chat-room':function(){layer.open({title:'项目聊天室',type:1,offset:&#......
  • pycharm记录
    EUWT4EE9X2-eyJsaWNlbnNlSWQiOiJFVVdUNEVFOVgyIiwibGljZW5zZWVOYW1lIjoic2lnbnVwIHNjb290ZXIiLCJhc3NpZ25lZU5hbWUiOiIiLCJhc3NpZ25lZUVtYWlsIjoiIiwibGljZW5zZVJlc3RyaWN0aW9uIjoiIiwiY2hlY2tDb25jdXJyZW50VXNlIjpmYWxzZSwicHJvZHVjdHMiOlt7ImNvZGUiOiJQU0kiLCJmYWxsYmFja0Rh......
  • Map的常见使用及循环的五中方式
    Map循环遍历的五种方法方法一:Setset=map.keySet();for(Objecto:set){System.out.println(o+""+map.get(o));} 通过key的set集合进行遍历,然后通过key来取map的value,此方法用的比较多。方法二:Setset=map.keySet();Iteratoriterator=set.iterator();whil......
  • 2023-11-30 记录实用小案例 —— react监听页面返回时执行事件
    useEffect(()=>{consthandlePageBack=()=>{//此处写你想要触发的事件};//监听浏览器的popstate事件,即页面返回事件window.addEventListener('popstate',handlePageBack);//在组件卸载时移除事件监听return()=>{......
  • 记录下当前的心情
    其实到今年23年,毕业马上快4年了,之间换过2份工作,第一份外包,第二份一家小的自研公司,回头看的话,发现自己一直在得过且过,躺的直直的,在工作中遇到问题了回去想办法解决,但是也仅限于此了,驱动力全是工作遇到的问题,问题解决后就万事大吉,从来没主导拿过去了解过底层的实现原理或者逻辑......