Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中为Redsys/Sermepa实现新的SHA256签名_Python_Payment Gateway_Sha256 - Fatal编程技术网

在Python中为Redsys/Sermepa实现新的SHA256签名

在Python中为Redsys/Sermepa实现新的SHA256签名,python,payment-gateway,sha256,Python,Payment Gateway,Sha256,我有一个基于django的应用程序,它使用Redsys(早期的Sermepa)作为信用卡支付平台。最近,我们收到一条消息,敦促我们从旧的SHA1签名迁移到SHA256,以便继续安全地使用该平台 平台提供了几个示例,说明如何使新请求生成新签名,但仅使用PHP和Java。现在,我试图将提供的解决方案移植到Python,但没有成功 这是PHP中的示例工作代码(带有假键/数据): 可以看出,如果运行代码,生成的签名是不等价的,因此支付平台拒绝了我的Python请求 有人能注意到我在签名生成方面的错误吗

我有一个基于django的应用程序,它使用Redsys(早期的Sermepa)作为信用卡支付平台。最近,我们收到一条消息,敦促我们从旧的SHA1签名迁移到SHA256,以便继续安全地使用该平台

平台提供了几个示例,说明如何使新请求生成新签名,但仅使用PHP和Java。现在,我试图将提供的解决方案移植到Python,但没有成功

这是PHP中的示例工作代码(带有假键/数据):

可以看出,如果运行代码,生成的签名是不等价的,因此支付平台拒绝了我的Python请求

有人能注意到我在签名生成方面的错误吗

提前感谢,, 阿尔瓦罗也有同样的问题

实际上,在JSON编码之后,我必须清除键/值对之间的空白空间。 但是我得到了不同的密文签名。这导致最终签名与示例不同

请注意,在示例代码中,它们在3DES加密中为订单号做了一个尾随填充

iv = b'\0\0\0\0\0\0\0\0'
k = DES3.new(key, DES3.MODE_CBC, iv)
ceros = b'\0'*(len(DS_MERCHANT_ORDER)%8)
clave = k.encrypt(DS_MERCHANT_ORDER+ceros.encode('UTF-8'))
谢谢

编辑:

最后我修复了它:

要获取每个操作的特定密钥,请执行以下操作:

    iv = b'\0\0\0\0\0\0\0\0'
    k = DES3.new(key, DES3.MODE_CBC, iv)
    ceros = b'\0'*(len(DS_MERCHANT_ORDER)%8)
    claveOp = k.encrypt(DS_MERCHANT_ORDER+ceros.encode('UTF-8'))
要获取hmac.sha256,请执行以下操作:

    from Crypto.Hash import HMAC, SHA256
    # Realizo la codificacion SHA256
    dig = HMAC.new(claveOp , msg=DS_MERCHANT_PARAMETERS,    digestmod=SHA256).digest()
    signatureEnc = base64.b64encode(dig)
希望它能帮助你, 最后,我在pypi中发布了关于redsys客户端的新版本


感谢阿尔瓦罗即将进行sha256签名。

嗨,拉法,我们在以下django模块中取得了一些进展,它可能会对您有所帮助
    iv = b'\0\0\0\0\0\0\0\0'
    k = DES3.new(key, DES3.MODE_CBC, iv)
    ceros = b'\0'*(len(DS_MERCHANT_ORDER)%8)
    claveOp = k.encrypt(DS_MERCHANT_ORDER+ceros.encode('UTF-8'))
    from Crypto.Hash import HMAC, SHA256
    # Realizo la codificacion SHA256
    dig = HMAC.new(claveOp , msg=DS_MERCHANT_PARAMETERS,    digestmod=SHA256).digest()
    signatureEnc = base64.b64encode(dig)