V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
dreamage
V2EX  ›  编程

请教一个 HMAC-SHA1 加密问题

  •  
  •   dreamage · 2017-07-04 16:25:41 +08:00 · 4355 次点击
    这是一个创建于 2709 天前的主题,其中的信息可能已经有所发展或是发生改变。
    0015025c01000000001a1ecf006a0000edd9ff145494a6305fc1fe38c585e589f6fa9880

    最后 20bytes 是 HMAC-SHA1 加密结果,key 是 123456

    https://1024tools.com/hmac 用 0015025c01000000001a1ecf006a0000 验证得不到 edd9ff145494a6305fc1fe38c585e589f6fa9880

    有人知道这是经过什么运算了吗?请大家推理(猜)一下……
    13 条回复    2017-09-11 11:04:35 +08:00
    dreamage
        1
    dreamage  
    OP
       2017-07-04 16:36:06 +08:00
    wsy2220
        2
    wsy2220  
       2017-07-04 17:25:06 +08:00
    没毛病,原文要先转成二进制
    wsy2220
        3
    wsy2220  
       2017-07-04 17:25:43 +08:00
    Kilerd
        4
    Kilerd  
       2017-07-04 18:16:56 +08:00
    这是签名!!!!不是加密!!!!!!
    dreamage
        5
    dreamage  
    OP
       2017-07-05 10:38:18 +08:00
    @wsy2220
    最前面的 00 要变成 00000000 吗 还是省略掉,试了各种方法还是得不到这个结果。。
    dreamage
        6
    dreamage  
    OP
       2017-07-05 10:38:55 +08:00
    @Kilerd 是……校验。。
    wsy2220
        7
    wsy2220  
       2017-07-05 10:59:23 +08:00
    @dreamage 00 表示一个字节值是 0. 找找你用的语言里 hex2bin 之类的函数处理
    dreamage
        8
    dreamage  
    OP
       2017-07-05 11:25:53 +08:00
    @wsy2220 python 得不到想要的结果

    import hashlib
    import hmac

    base = [str(x) for x in range(10)] + [ chr(x) for x in range(ord('A'),ord('A')+6)]

    #10->2
    def dec2bin(string_num):
    num = int(string_num)
    mid = []
    while True:
    if num == 0: break
    num,rem = divmod(num, 2)
    mid.append(base[rem])
    return ''.join([str(x) for x in mid[::-1]])

    #16->10
    def hex2dec(string_num):
    return str(int(string_num.upper(), 16))

    #16->2
    def hex2bin(string_num):
    return dec2bin(hex2dec(string_num.upper()))

    key = "123456"
    msg = hex2bin('0015025c01000000001a1ecf006a0000')
    print msg

    m = hmac.new(key, msg, hashlib.sha1)
    signature = m.hexdigest()
    print signature
    -------------------------------
    101010000001001011100000000010000000000000000000000000000000000011010000111101100111100000000011010100000000000000000
    29c6662533383f42db96fa6a7f82f265aa1b84e8
    wsy2220
        9
    wsy2220  
       2017-07-05 12:17:40 +08:00
    @dreamage python hex2bin 意思跟别的不一样,应该用下面这个:

    import binascii
    hexstr = '0015025c01000000001a1ecf006a0000'
    binstr = binascii.unhexlify(hexstr)
    dreamage
        10
    dreamage  
    OP
       2017-07-05 12:22:18 +08:00
    @wsy2220 行了 感谢
    suduo1987
        11
    suduo1987  
       2017-07-25 16:47:17 +08:00
    CryptoJS
    chinawrj
        12
    chinawrj  
       2017-09-08 10:50:39 +08:00
    @Kilerd 别介意,lz 可能不在乎签名还是校验究竟是什么区别。加密也是。
    dreamage
        13
    dreamage  
    OP
       2017-09-11 11:04:35 +08:00 via Android
    @chinawrj 我的锅 概念不清
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1010 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 21:01 · PVG 05:01 · LAX 13:01 · JFK 16:01
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.