Java 中的 HMAC SHA1 签名

2023-11-25

我正在尝试与 TransUnion Web 服务交互,并且需要提供 HMAC-SHA1 签名才能访问它。

此示例位于 TransUnion 文档中:
输入SampleIntegrationOwner2008‐11‐18T19:14:40.293Z有安全保障 钥匙xBy/2CLudnBJOxOtDhDRnsDYq9HTuDVr2uCs3FMzoxXEA/Od9tOuwSC70+mIfpjeG68ZGm/PrxFf/s/CzwxF4Q==创建输出/UhwvT/kY9HxiXaOjpIc/BarBkc=.

给定数据和密钥,我无法在 Java 中得到相同的结果。我尝试了几个在线计算器,但没有一个返回这个结果。他们的文档中的示例是否不正确,或者我只是没有正确处理这些字符串?

这是我当前正在使用的代码:

public static String calcShaHash (String data, String key) {
    String HMAC_SHA1_ALGORITHM = "HmacSHA1";       
    String result = null;

    try {         
        Key signingKey = new SecretKeySpec(key.getBytes(), HMAC_SHA1_ALGORITHM);
        Mac mac = Mac.getInstance(HMAC_SHA1_ALGORITHM);
        mac.init(signingKey);
        byte[] rawHmac = mac.doFinal(data.getBytes());
        result = Base64.encodeBase64String(rawHmac);    
    }
    catch (Exception e) {
        e.printStackTrace(); 
    }       

    return result;
}

这是我的单元测试代码:

@Test
public void testCalcShaHash() {
    String data = "SampleIntegrationOwner2008-11-18T19:14:40.293Z";
    String key = "xBy/2CLudnBJOxOtDhDRnsDYq9HTuDVr2uCs3FMzoxXEA/Od9tOuwSC70+mIfpjeG68ZGm/PrxFf/s/CzwxF4Q==";
    String result = Utils.calcShaHash(data, key);
    assertEquals(result, "/UhwvT/kY9HxiXaOjpIc/BarBkc=");

}

这看起来像一个 Base64 编码的密钥。所以我认为您需要对其进行 Base64 解码,然后将其传递给 HMAC。像这样的东西(只是为了说明我还没有测试它,任何错误都是读者的练习):

public String getHmacMD5(String privateKey, String input) throws Exception{
    String algorithm = "HmacSHA1";
    byte[] keyBytes = Base64.decode(privateKey);
    Key key = new SecretKeySpec(keyBytes, 0, keyBytes.length, algorithm); 
    Mac mac = Mac.getInstance(algorithm);
    mac.init(key); 
    return Base64.encode(mac.doFinal(input.getBytes()));
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java 中的 HMAC SHA1 签名 的相关文章

随机推荐

  • 在Java中,字符串是字符数组吗?

    我想知道 如果String是一个集合 我已经阅读了周围的内容 但仍然很困惑 字符串是不可变的表示字符序列的对象 CharSequence是 String 实现的接口之一 与字符数组和字符集合的主要区别 字符串无法修改 不可能 忽略反射 添加
  • 从两个日期之间的日期范围中选择数据

    我有一张名为Product Sales它保存这样的数据 Product ID Sold by Qty From date To date 3 12 7 2013 01 05 2013 01 07 6 22 14 2013 01 06 201
  • 如何在 React 中使用 RXJS fromEvent?

    我试图在反应中记录按钮上的点击事件 const InputBox gt const clicky fromEvent document getElementById clickMe click subscribe clickety gt c
  • 如何创建数组的随机排列?

    我已经用 C 编写了这个函数 我希望它创建一个随机排列或从 1 到 n 的数字列表 我很难让它没有重复的数字 因此 如果您有 n 4 我希望它返回一个包含 1 4 的随机数组 每个数组仅一次 例如 1 3 4 2 int random in
  • 如何使用 powershell 为 Windows 10 通用应用程序创建桌面快捷方式?

    我有一个创建的 UWP 应用程序 想要使用 powershell 在桌面上创建快捷方式 创建快捷方式对于 exe 来说很容易 TargetFile Path To MyProgram exe ShortcutFile env USERPRO
  • 访问相关对象键而不在App Engine中获取对象

    一般来说 对给定对象执行单个查询比执行多个查询更好 假设我有一堆 儿子 对象 每个对象都有一个 父亲 我得到了所有 儿子 对象 sons Son all 然后 我想找到那群儿子的所有父亲 我愿意 father keys for son in
  • 如何将GET参数传递给jsFiddle

    如何将GET参数传递给jsFiddle 我试过http jsfiddle net mKwcF id 123但我得到的只是http fiddle jshell net mKwcF show 我的示例 js 在上面给定的链接上很简单 alert
  • 如何让建议组件在 SolrNet 中工作?

    我已经配置了 solrconfig xml 和 schema xml 来查询建议 我可以从网址中获取建议 http localhost 8080 solr collection1 suggest q ha wt xml 我的 SolrCon
  • 现代 n 层 ASP.NET Web 应用程序示例?

    所以我的 asp net 非常非常生锈 我正在尝试回到最佳实践以及其他什么 因此 我快速搜索谷歌并开始寻找示例 示例和教程 但我找到了什么 甚至在石器时代 最新 技术发布之前就已经写了一些陈旧的硬壳东西 当然 这些概念可能仍然有效 但实际执
  • 以 UTC 存储时间总是一个好主意,还是在这种情况下以本地时间存储更好?

    一般来说 最好的做法是用 UTC 存储时间 如中所述here and here 假设有一个重复发生的事件 假设结束时间始终为同一当地时间 假设为 17 00 无论该时区是否启用夏令时 并且还要求在特定时区的 DST 打开或关闭时不要手动更改
  • 在 Android 中调整位图大小

    我使用以下代码调整位图的大小 FileOutputStream out new FileOutputStream sdcard mods png Bitmap bmp Bitmap createScaledBitmap pict int p
  • 将数字限制在某个范围内 (Haskell)

    我公开了一个带有两个参数的函数 一个是最小界限 另一个是最大界限 例如 如何使用类型确保最小界限不大于最大界限 我想避免创建一个智能构造函数并返回 Maybe 因为它会使整个使用更加麻烦 谢谢 这并不能完全回答你的问题 但有时有效的一种方法
  • AWS Cognito - 用户池联合与身份池联合

    Question 为什么 AWS Cognito 有两个位置来联合身份提供商 我认为身份池应该与身份提供商联合 并且想知道为什么用户池也可以 请说明为什么有两个地点的原因 Cognito Identity Pool can federate
  • 清除__m128i的高字节

    我该如何清除16 ia 的高字节 m128i 我已经尝试过这个 它有效 但我想知道是否有更好 更短 更快 的方法 int i 0 lt i lt 16 m128i x m128i mask mm set epi8 0 i gt 14 1 0
  • 如何在 Express js 中使用 cookie 重定向到不同的域

    我正在 Node 上使用 Express 开发一个 Web 应用程序 我正在尝试实现代理登录功能 用户在登录我的网站后直接登录并重定向到另一个网站 在我的路由函数中 我编写了以下代码 res cookie fanws 值 res 重定向 h
  • Hyperv 似乎没有安装

    Hyper V 已启动 操作系统 Windows 10 专业版 内存 4GB Power shell 在管理模式下启动 我已经创建了一个虚拟交换机管理器 然后我正在尝试以下命令 minikube start vm driver hyperv
  • Flutter:让应用程序在后台运行的跨平台方式

    我正在尝试找出一种方法来保持 Flutter 应用程序运行 即使它没有处于焦点状态 例如 无论前台正在运行什么 都可以运行倒计时并在完成时播放警报声 显示通知 有人能指出我正确的方向吗 理想情况下 可以跨平台工作 我找到了这个thread但
  • PHP SimpleXML 换行

    我使用 PHP 的简单 XML 创建了一个 XML 文件 并保存了该文件 使用 fopen 在 php 中打开文件并打印内容时 我的 XML 如下所示 见下文
  • 让 CIColorCube 滤镜在 Swift 中工作

    我正在尝试让 CIColorCube 过滤器正常工作 然而 苹果文档仅提供了一个解释不清的参考示例 Allocate memory const unsigned int size 64 float cubeData float malloc
  • Java 中的 HMAC SHA1 签名

    我正在尝试与 TransUnion Web 服务交互 并且需要提供 HMAC SHA1 签名才能访问它 此示例位于 TransUnion 文档中 输入SampleIntegrationOwner2008 11 18T19 14 40 293