微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 Python 中使用预主密钥计算 TLS PRF 主密钥

如何解决在 Python 中使用预主密钥计算 TLS PRF 主密钥

我有以下信息:

    "hashAlg": "SHA2-256","tlsversion": "v1.2","keyBlockLength": 1024,"preMasterSecretLength": 384,"preMasterSecret": "2DE53DAC84478C9822D0536FF4ACB173B3FC46FD6BFC7E5292C2934CCFAE484EFA7B29415922157C49DD361B24EB7A3F","clientHelloRandom": "15E63D4BBF368C77FA8A877C8FE66F19364C713A9DD158B8AC61E2EDCA8D8E10","serverHelloRandom": "7B60A1AB6152930389B055573C6B114026E73382163C005090C532B86E5BCE99","clientRandom": "AFE563DF246AD11D44BEA9D1397E0FA44478744A7C3F55AAE77EDD166C04BC72","serverRandom": "46075972454EBFFDC9A927229CBD0E1B8F3F34160192849263107B2FC5A3C19F"
      },

使用上面的,我需要计算主密钥和密钥块。正确答案应该是:

        "masterSecret": "37E354C738B7157EB79F5F790C23D7B3D79FFD47D61C56E52696412176C3B43ADB736DC362447DBB8EC64258B9ACE55F","keyBlock": "CB38007C89A03DD020A91684A3419084637356E76C9B9EFF57325816419A8312409DA4C358E731C10BDEB65B29C0DBB0916EF39C443E4E8437A2B84256232ADB1DA6547580EA510F134CE1812F06CDEBAFF6B9404213C1A4843EF35599549FAEF1014C4D0B8F9335D82F3EF5D85CBFB779D4D56D6539A31538946FCD5213ED66"

我的代码如下:

def prf(secret,seed,numblocks):
    seed=seed
    output = b''
    a=hmac.new(secret,msg=seed,digestmod=hashlib.sha256).digest()
    for j in range(numblocks):
        output += hmac.new(secret,msg=a+seed,digestmod=hashlib.sha256).digest()
        a=hmac.new(secret,msg=a,digestmod=hashlib.sha256).digest()
    return output

def master_secret(pms,client_random,server_random):
    out=prf(pms,client_random+server_random,2)
    return out[:48]

def keyblock(ms,server_random):
    u=prf(ms,server_random+client_random,4)
    return u

但我最终得到了这个代码错误答案:

>>> import prf
>>> pre_master_secret = bytes.fromhex("2DE53DAC84478C9822D0536FF4ACB173B3FC46FD6BFC7E5292C2934CCFAE484EFA7B29415922157C49DD361B24EB7A3F")
>>> client_random = bytes.fromhex("AFE563DF246AD11D44BEA9D1397E0FA44478744A7C3F55AAE77EDD166C04BC72")
>>> server_random = bytes.fromhex("46075972454EBFFDC9A927229CBD0E1B8F3F34160192849263107B2FC5A3C19F")
>>> prf.master_secret(pre_master_secret,server_random).hex()
'8e0a0a801f5eb2083e51df6cee753c3c6c380b0b17875219e87c0d95e61207fdd55d2fd9785a3721e8726958955a41f4'

有人看到我哪里出错了吗?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。