Tag: hmac

Base64_encode在Java和PHP之间有所不同

这是我的问题: 我有一个JAVA函数来生成加密的字符串。 我必须在PHP中做同样的事情。 我的Javafunction: String generateSignature () { byte[] Sequence = (“hello”).getBytes(“UTF-8”); Mac HMAC = Mac.getInstance(“HMACSHA256”); HMAC.init(“SECRET_KEY”); byte[] Hash = HMAC.doFinal(Sequence); String Signature = new String(Base64.encodeBase64(Hash)); return Signature; } 我的PHPfunction: function generateSignature() { $sequence = “hello”; $encrypted = hash_hmac(‘sha256’, $sequence, “SECRET_KEY”); return base64_encode($encrypted); } 两个函数的返回值不一样。 我注意到在编码到base 64之前,两个函数都有相同的结果。 所以,对我来说,问题不在于密钥的生成,而在于编码。 有人能帮忙吗?

PHP和Java hmac哈希输出匹配hex,在原始二进制文件中不匹配。 发生了什么?

我正在开发一个Java游戏,它将打包为applet,我正在研究网络方面。 我设计了一个会话流程,可以满足请求频率和安全需求,而无需使用SSL。 数据传输过程基于facebook在其OAuth流程中使用signed_token的方式。 这是简化的上下文: 我的php / java实现使用hash_hmac / javax.crypto.Mac生成一个用于签署有效负载的模糊签名,基于共享,秘密,唯一令牌和各种JSON有效负载 两个输出必须完全匹配,因为它们是更大的编码/解码压缩方案的一部分 此签名将通过带有效负载的URL传递,并用于validation有效负载的有效性和完整性 正如您可以推断的那样,如果它们不匹配,那么由于发送的数据无效,我丢弃了数据包和错误。 我的问题是, 虽然结果的hex编码完全匹配,但原始二进制文件似乎永远不匹配 。 下面是我设置的提取的php和Java测试用例: 注意:由于php和java如何为php关联数组/ java哈希映射生成JSON结构的差异,我使用秘密的值代替字符串有效负载,以便两个字段在平台之间保持一致。 PHP的: $secret = “922ec205d8e4d0ea06079d60a5336fffd9cf0aea”; $json = $secret; //json_encode($test_array); $hmac_a = hash_hmac(‘sha256’,$json,$secret); $hmac_b = hash_hmac(‘sha256’,$json,$secret,$raw=true); echo(htmlentities($hmac_a).”\n”); echo(htmlentities($hmac_b).”\n”); 浏览器内输出: ff21a9e468ac49863e5e992324ac8bc92f239a08100b0f329b087be16f5ad382 Y!©äh¬I†> ^™#$¬ {áoZÓ, Java的: Mac hmac = Mac.getInstance(“HmacSHA256”); SecretKeySpec secret_key = new SecretKeySpec(Charset.forName(“UTF-8”).encode(this.secret).array(), “HmacSHA256”); hmac.init(secret_key); byte[] digest = hmac.doFinal(this.secret.getBytes(“UTF-8”)); […]

在java中使用密钥计算HMAC-SHA512

我想兴奋地构建一个函数,它生成一个带有密钥的HMAC,就像这个站点提供的: http://www.freeformatter.com/hmac-generator.html java 8 lib只提供MessageDigest和KeyGenerator,它们最多只支持SH256。 谷歌也没有给我任何结果来生成HMAC。 有人知道实施吗? 我有这个代码生成一个普通的SH256,但我想这对我没什么帮助: public static String get_SHA_512_SecurePassword(String passwordToHash) throws Exception { String generatedPassword = null; MessageDigest md = MessageDigest.getInstance(“SHA-512”); byte[] bytes = md.digest(passwordToHash.getBytes(“UTF-8”)); StringBuilder sb = new StringBuilder(); for (int i = 0; i < bytes.length; i++) { sb.append(Integer.toString((bytes[i] & 0xff) + 0x100, 16).substring(1)); } generatedPassword = sb.toString(); System.out.println(generatedPassword); return […]

c#和java – hmacsha256哈希之间的区别

我在Java中有以下代码: byte[] secretKey = secretAccessKey.getBytes(“UTF-8”); SecretKeySpec signingKey = new SecretKeySpec(secretKey, “HmacSHA256”); Mac mac = Mac.getInstance(“HmacSHA256”); mac.init(signingKey); byte[] bytes = data.getBytes(“UTF-8”); byte[] rawHmac = mac.doFinal(bytes); String result = javax.xml.bind.DatatypeConverter.printBase64Binary(rawHmac); 以及C#中的以下代码: UTF8Encoding enc = new UTF8Encoding(); byte[] secretKey = enc.GetBytes(secretAccessKey); HMACSHA256 hmac = new HMACSHA256(secretKey); hmac.Initialize(); byte[] bytes = enc.GetBytes(data); byte[] rawHmac = hmac.ComputeHash(bytes); string result = […]

java hmac / sha512代

我有这个PHP代码生成一个HMAC (而不是一个简单的消息摘要): 通过ABC输入,其输出为: 100A6A016A4B21AE120851D51C93B293D95B7D8A44B16ACBEFC2D1C9DF02B6F54FA3C2D6802E52FED5DF8652DDD244788A204682D2D1CE861FDA4E67F2792643 我需要在java中克隆它。 所以这是我当前的java克隆: private String generateHMAC( String datas ) { // final Charset asciiCs = Charset.forName( “utf-8” ); Mac mac; String result = “”; try { byte[] bytesKey = PayboxConstants.KEY.getBytes( ); final SecretKeySpec secretKey = new SecretKeySpec( bytesKey, “HmacSHA512” ); mac = Mac.getInstance( “HmacSHA512” ); mac.init( secretKey ); final byte[] macData = […]

需要在Objective C中生成HMAC SHA256哈希,就像在Java中一样

我需要使用HMAC SHA256生成哈希。 我在Java中使用以下代码。 我需要Objective-C中的等效代码。 javax.crypto.Mac mac = javax.crypto.Mac.getInstance(type); javax.crypto.spec.SecretKeySpec secret = new javax.crypto.spec.SecretKeySpec(key.getBytes(), type); mac.init(secret); byte[] digest = mac.doFinal(value.getBytes()); StringBuilder sb = new StringBuilder(digest.length * 2); String s=””; for (byte b: digest) { s = Integer.toHexString(b); if (s.length() == 1) { sb.append(‘0’); } sb.append(s); } return sb.toString(); Key = YARJSuwP5Oo6/r47LczzWjUx/T8ioAJpUK2YfdI/ZshlTUP8q4ujEVjC0seEUAAtS6YEE1Veghz+IDbNQb+2KQ== 价值= id=456|time=19:10|nonce=8 输出= 4effffffd8ffffffce7cffffffc4ffffffc71b2f72ffffffdc21ffffffa1ffffffe0ffffffe62d32550b0771296bffffff9c1159ffffffdeffffff8675ffffff9928654c 我有这个Objective-Cfunction: […]