Java HmacSHA256加密与PHP、Golang语言SHA256互通
2018-03-16 00:00
906 查看
最近工作中涉及到关于HmacSHA256加密的方式, PHP同事咨询我说无法加密,其实问题很简单,记录下来,方便那些不细心的码友们^_^。
JAVA中HmacSHA256的加密方式:
大致分为这几部分来分析:
1. 获取SHA256实例
2. 生成一个加密key
3.通过这个加密key初始化SHA256实例
4. 根据提供的字符串,使用此实例进行加密生成hash
4. 最后整体就是转为16进制后再输出字符串
PHP部分很简单
世界上最好的语言嘛,对不对!!
为了方便对比,我将函数参数都声明为相同的名字。
注意PHP文档中的hash_hmac的声明:
就因为JAVA工程师将参数跟PHP的参数传递相反,导致PHP工程师?蒙b!
Golang部分后期更新
JAVA中HmacSHA256的加密方式:
public static String SignUp(String secretKey, String plain) { byte[] keyBytes = secretKey.getBytes(); byte[] plainBytes = plain.getBytes(); try { Mac sha256_HMAC = Mac.getInstance("HmacSHA256"); SecretKeySpec secret_key = new SecretKeySpec(keyBytes, "HmacSHA256"); sha256_HMAC.init(secret_key); byte[] hashs = sha256_HMAC.doFinal(plainBytes); StringBuilder sb = new StringBuilder(); for (byte x : hashs) { String b = Integer.toHexString(x & 0XFF); if (b.length() == 1) { b = '0' + b; } // sb.append(String.format("{0:x2}", x)); sb.append(b); } return sb.toString(); // String hash = // Base64.encodeToString(sha256_HMAC.doFinal(plainBytes), // Base64.DEFAULT); // return hash; } catch (Exception e) { e.printStackTrace(); } return null; }
大致分为这几部分来分析:
1. 获取SHA256实例
2. 生成一个加密key
3.通过这个加密key初始化SHA256实例
4. 根据提供的字符串,使用此实例进行加密生成hash
4. 最后整体就是转为16进制后再输出字符串
PHP部分很简单
世界上最好的语言嘛,对不对!!
function ($plain,$secretKey){ return bin2hex(hash_hmac("sha256",utf8_encode($plain) , utf8_encode($secretKey), true)); }
为了方便对比,我将函数参数都声明为相同的名字。
注意PHP文档中的hash_hmac的声明:
string hash_hmac ( string $algo , string $data , string $key [, bool $raw_output = FALSE ] ) algo 要使用的哈希算法名称,例如:"md5","sha256","haval160,4" 等。 如何获取受支持的算法清单,请参见 hash_algos()。 data 要进行哈希运算的消息。 key 使用 HMAC 生成信息摘要时所使用的密钥。 raw_output 设置为 TRUE 输出原始二进制数据, 设置为 FALSE 输出小写 16 进制字符串。
就因为JAVA工程师将参数跟PHP的参数传递相反,导致PHP工程师?蒙b!
Golang部分后期更新
相关文章推荐
- AES加密CBC模式兼容互通四种编程语言平台【PHP、Javascript、Java、C#】
- C#, Java, PHP, Python和Javascript几种语言的AES加密解密实现[转载]
- AES加密CBC模式兼容互通四种编程语言平台【PHP、Javascript、Java、C#】
- php 和 java RSA 对称加密互通的问题
- 各种语言版本的基于HMAC-SHA256的base64加密
- AES加密CBC模式兼容互通四种编程语言平台【PHP、Javascript、Java、C#】
- java实现HMACSHA256(md5私钥key)加密签名
- java php c# 三种语言的AES加密互转
- C#, Java, PHP, Python和Javascript几种语言的AES加密解密实现
- AES加密php,java,.net三种语言同步实现加密、解密
- java和php实现RSA加密互通-b
- php和java之间aes加密的互通
- 使用Thrift0.9.1实现跨语言调用Golang、Php、Python、Java
- AES加密CBC模式兼容互通四种编程语言平台【PHP、Javascript、Java、C#】
- C#, Java, PHP, Python和Javascript几种语言的AES加密解密实现【多种语言AES/CBC/PKCS5Padding通用加解密数据】
- AES加密CBC模式兼容互通四种编程语言平台【PHP、Javascript、Java、C#】
- AES加密CBC模式兼容互通四种编程语言平台【PHP、Javascript、Java、C#】
- AES 加密 PHP 和 JAVA 互通
- php 和 java RSA 对称加密互通的问题
- AES加密CBC模式兼容互通四种编程语言平台AES加密CBC模式兼容互通四种编程语言平台【PHP、Javascript、Java、C#】