首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java和Python生成不同的Hmac-SHA256 256输出。

Java和Python生成不同的Hmac-SHA256 256输出。
EN

Stack Overflow用户
提问于 2016-04-23 20:08:12
回答 1查看 3K关注 0票数 4

我试图在Python中生成与我的Java模板相同的Hmac- the 256签名。但是Python脚本产生不同的输出。我找不到我的错误。有谁可以帮我?

Java

代码语言:javascript
复制
public class Main {
    public static void main(String[] args) {
        String paramString = "teststring";
        calculateSignature(hash(paramString));
    }

    private static byte[] hash(String paramString)
    {
        MessageDigest localMessageDigest = MessageDigest.getInstance("SHA-256");
        localMessageDigest.update(paramString.getBytes("UTF-8"));
        byte[] paramByte = localMessageDigest.digest();
        System.out.println("Hash: " + DatatypeConverter.printBase64Binary(paramByte));
        return paramByte;
    }

    public static void calculateSignature(byte[] paramArrayOfByte)
    {
        String Algor = "HmacSHA256";
        Mac localMac = Mac.getInstance(Algor);
        byte [] key = "secretkey".getBytes();
        localMac.init(new SecretKeySpec(key, Algor));
        paramArrayOfByte = localMac.doFinal(paramArrayOfByte);
        System.out.println("Signature: " + DatatypeConverter.printBase64Binary(paramArrayOfByte));
    }
}

散列: PIcn4BmkK0RGZ6WHtgASUb7K2ruza/7YCHqSwYiC0RE= 签名:X8V4RA7qaoVGz5K2161gAXNPuLkAI7NZ9/9d7WnblbA=

Python

代码语言:javascript
复制
# -*- coding: utf-8 -*-
import hashlib
import base64
import hmac

secretkey = 'secretkey'
stringToSign = "teststring"

def hash(paramstring):
    x = base64.b64encode(hashlib.sha256(paramstring).digest())
    print('Hash: ' + x)
    return x

def calculate_signature(hashvalue):
    x = base64.b64encode(hmac.new(secretkey, hashvalue, hashlib.sha256).digest())
    print('Signature: ' + x)

calculate_signature(hash(stringToSign))

散列: PIcn4BmkK0RGZ6WHtgASUb7K2ruza/7YCHqSwYiC0RE= 签名: NE8RtuFsOtafWrwDdlzILMgqCDm2huJ9A3IO6iy44Jc=

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-24 09:20:59

问题是在python代码中,您返回了base64编码,但是在java中,您只将它打印为base64编码,但返回不包含。

尝试:

代码语言:javascript
复制
private static byte[] hash(String paramString)
{
    MessageDigest localMessageDigest = MessageDigest.getInstance("SHA-256");
    localMessageDigest.update(paramString.getBytes("UTF-8"));
    byte[] paramByte = localMessageDigest.digest();
    String base64Binary = DatatypeConverter.printBase64Binary(paramByte);
    System.out.println("Hash: " + base64Binary);
    return base64Binary.getBytes();
}

或将python代码修改为:

代码语言:javascript
复制
def hash(paramstring):
    x = hashlib.sha256(paramstring).digest()
    return x
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36815817

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档