相关疑难解决方法(0)

如何在Java中将字节数组转换为十六进制字符串?

我有一个字节数组填充十六进制数字和打印它简单的方法是非常没有意义的,因为有许多不可打印的元素.我需要的是以下形式的确切十六进制代码:3a5f771c

java hex bytearray

606
推荐指数
16
解决办法
67万
查看次数

松弛请求验证:无法使用签名密钥计算匹配请求摘要

我正在Slack上实现交互式消息,它包含一些动作按钮.使用Slack App我能够处理Slack用户点击我的Java Springboot API上的按钮.

到目前为止,一切都很好.但是,我很难计算匹配请求签名(摘要)以验证它实际来自Slack.我在Slack验证文档页面上阅读了有关该文档的所有文档.

该页面描述了签名必须作为HMAC SHA256哈希计算,使用签名密钥作为密钥,内容作为松弛版本,时间戳和请求体的串联,例如:

v0:123456789:command=/weather&text=94070
Run Code Online (Sandbox Code Playgroud)

在页面上说明:

...在计算签名时仅评估原始HTTP请求正文.

...所以我没有在哈希计算之前编码/反序列化请求(我已经从Slack下面收到了我收到的请求)

要计算哈希,我使用StackOverflow上的代码:

private String computeMessageDigest(String content) {
    final String ALGORITHM = "HmacSHA256";
    final String UTF_8 = "UTF-8";

    try {
        Key signingKey = new SecretKeySpec(signingSecret.getBytes(UTF_8), ALGORITHM);
        Mac mac = Mac.getInstance(ALGORITHM);
        mac.init(signingKey);

        return Hex.encodeHexString(mac.doFinal(content.getBytes(UTF_8)));
    } catch (Exception e) {
        throw new RuntimeException(e);
    }
}
Run Code Online (Sandbox Code Playgroud)

我也尝试使用这个在线哈希生成器来比较结果,它们是相同的.

从Slack收到的请求如下:

{
    "headers": {
        "x-forwarded-for": ["::ffff:52.72.111.29"],
        "x-forwarded-proto": ["https"],
        "x-pagekite-port": ["443"],
        "host": ["inqool.pagekite.me"],
        "user-agent": ["Slackbot 1.0 (+https://api.slack.com/robots)"], …
Run Code Online (Sandbox Code Playgroud)

java verification signing request slack

7
推荐指数
2
解决办法
1482
查看次数

标签 统计

java ×2

bytearray ×1

hex ×1

request ×1

signing ×1

slack ×1

verification ×1