首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AWS签名4: Java和Crypto-JS不前进

AWS签名4: Java和Crypto-JS不前进
EN

Stack Overflow用户
提问于 2017-12-05 09:32:37
回答 0查看 360关注 0票数 0

我正在使用java做一些AWS签名头的帖子。签名过程如下

代码语言:javascript
复制
    private String calculateSignature(String stringToSign) {
        try {
                byte[] signatureKey = getSignatureKey(secretAccessKey, currentDate, regionName, serviceName);
                byte[] signature = HmacSHA256(stringToSign, signatureKey);
                String strHexSignature = bytesToHex(signature);
                return strHexSignature;
            } catch (Exception ex) {
                ex.printStackTrace();
            }
            return null;
    }

    private byte[] HmacSHA256(String data, byte[] key) throws Exception {
        String algorithm = "HmacSHA256";
        Mac mac = Mac.getInstance(algorithm);
        mac.init(new SecretKeySpec(key, algorithm));
        return mac.doFinal(data.getBytes("UTF8"));
    }

    private byte[] getSignatureKey(String key, String date, String regionName, String serviceName) throws Exception {
        byte[] kSecret = ("AWS4" + key).getBytes("UTF8");
        byte[] kDate = HmacSHA256(date, kSecret);
        byte[] kRegion = HmacSHA256(regionName, kDate);
        byte[] kService = HmacSHA256(serviceName, kRegion);
        byte[] kSigning = HmacSHA256(aws4Request, kService);
        return kSigning;
    }

    private String bytesToHex(byte[] bytes) {
        final StringBuilder hexString = new StringBuilder();
        for(byte b : bytes)
            hexString.append(String.format("%02x", b));
        return hexString.toString().toLowerCase().trim();
    }

但是,当我使用此签名发送时,它与服务器计算的签名不匹配。服务器端采用PHP编写,使用Crypto-JS进行签名计算。我比较了两个字符串需要签名和规范的请求在Java和PHP之间。它们是匹配的。

我已经检查了空间,命令和其他特征。但却找不到原因。Java HmacSHA256和crypto-js HmacSHA256有什么不同?还是bytesToHex方法出了什么问题?

规范请求的Java输出

代码语言:javascript
复制
POST
/

content-length:667
content-type:application/json
host:host.name.com
x-amz-date:20171205T012629Z
x-amz-target:_20141201.XXXXXXX

content-length;content-type;host;x-amz-date;x-amz-target
c5b31b699700e6debe4548836a723f89b73ffcef6570e1bed4c534c0f247dc26

PHP返回:

代码语言:javascript
复制
POST
/

content-length:667
content-type:application/json
host:host.name.com
x-amz-date:20171205T012629Z
x-amz-target:_20141201.XXXXXXX

content-length;content-type;host;x-amz-date;x-amz-target
c5b31b699700e6debe4548836a723f89b73ffcef6570e1bed4c534c0f247dc26

任何帮助或任何想法都将不胜感激。

EN

回答

页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47644697

复制
相关文章

相似问题

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