Tag: hmacsha1

C#vs Java HmacSHA1然后base64

我有一个java代码示例,用于使用HMAC-SHA1算法(RFC 2104)计算摘要,然后使用Base64编码(RFC 2045)进行编码。 这是java代码 public static String buildDigest(String key, String idString) throws SignatureException { try { String algorithm = “HmacSHA1”; Charset charset = Charset.forName(“utf-8”); SecretKeySpec signingKey = new SecretKeySpec(key.getBytes(), algorithm); Mac mac = Mac.getInstance(algorithm); mac.init(signingKey); return new String(Base64.encodeBase64(mac.doFinal(idString.getBytes(charset))), charset); } catch (Exception e) { throw new SignatureException(“Failed to generate HMAC : ” + e.getMessage()); } […]

将HMAC-SHA1从node.js转换为Java

我的任务是将一些现有的node.js代码转换为Java。 我觉得我很顺利,但现在我有点卡住了。 方法的输出似乎不匹配。 我正在做的是基于查询字符串创建SHA-1签名。 此查询字符串包含一些与查询相关的数据(与此问题无关)和API密钥。 重要 node.js中的api_secret字符串等同于Java中的Config.API_SECRET 。 示例查询字符串(在node.js和Java程序中它们相同): /events?festival=imaginate&pretty=1&size=100&from=0&key=SOME_KEY 实际代码 SHA-1 hmac在nodejs中初始化如下: const hmac = crypto.createHmac(‘sha1’, api_secret); SHA-1 mac在Java中初始化如下: final SecretKeySpec secretKeySpec = new SecretKeySpec(Config.API_SECRET.getBytes(“UTF-8”), “HmacSHA1”); final Mac hmac = Mac.getInstance(“HmacSHA1”); hmac.init(secretKeySpec); 接下来,node.js程序更新hmac( query参数如上所列): hmac.update(query, ‘ascii’); 我在Java中复制了这个( query参数等于node.js query参数): hmac.update(query.getBytes(“US-ASCII”)); 最后,在node.js程序中将字节字符串转换为SHA-1哈希: const signature = hmac.digest(‘hex’); 我找不到Java的确切翻译,但这是我的尝试,我认为这是关于同样的事情: 字节数组为hex函数 public static String byteArrayToHex(byte[] a) { StringBuilder […]

Java中的HMAC SHA1签名

我正在尝试与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 […]