认证加密算法php hash_hmac和java hmacSha1的问题
public class Test{
public static void main(String[] args) throws Exception {
String postString = "abc";
String signature = ByteToHex(genHMAC(postString, "310A54B3C9C12920E1582E016F15DD441ACE8553769E8991")).toUpperCase();
}
/**
* 使用 HMAC-SHA1 签名方法对data进行签名
*
* @param data
* 被签名的字符串
* @param key
* 密钥
* @return
加密后的字符串
*/
public static byte[] genHMAC(String data, String key) {
byte[] result = null;
try {
//根据给定的字节数组构造一个密钥,第二参数指定一个密钥算法的名称
SecretKeySpec signinKey = new SecretKeySpec(hexString2Bytes(key), "HmacSHA1");
//生成一个指定 Mac 算法 的 Mac 对象
Mac mac = Mac.getInstance("HmacSHA1");
//用给定密钥初始化 Mac 对象
mac.init(signinKey);
//完成 Mac 操作
byte[] rawHmac = mac.doFinal(data.getBytes());
result = rawHmac;
} catch (NoSuchAlgorithmException e) {
System.err.println(e.getMessage());
} catch (InvalidKeyException e) {
System.err.println(e.getMessage());
}
if (null != result) {
return result;
} else {
return null;
}
}
public static byte[] hexString2Bytes(String src) {
int l = src.length() / 2;
byte[] ret = new byte[l];
for (int i = 0; i < l; i++) {
ret[i] = (byte) Integer
.valueOf(src.substring(i * 2, i * 2 + 2), 16).byteValue();
}
return ret;
}
// btye转换hex函数
public static String ByteToHex(byte[] byteArray) {
StringBuffer StrBuff = new StringBuffer();
for (int i = 0; i < byteArray.length; i++) {
if (Integer.toHexString(0xFF & byteArray[i]).length() == 1) {
StrBuff.append("0").append(
Integer.toHexString(0xFF & byteArray[i]));
} else {
StrBuff.append(Integer.toHexString(0xFF & byteArray[i]));
}
}
return StrBuff.toString();
}
}
方法一:
$str = "abc";
$key = "310A54B3C9C12920E1582E016F15DD441ACE8553769E8991";
$decodedKey = pack("H*", $key); //十六进制转成字符串
$hash = bin2hex(hash_hmac("sha1", $str, $decodedKey, true));
方法二:
//字节数组转化为String类型的数据
function toStr($bytes) {
$str = '';
foreach($bytes as $ch) {
$str .= chr($ch);
}
return $str;
}
//字符串转十六进制
function String2Hex($string){
$hex='';
for ($i=0; $i < strlen($string); $i++){
$hex .= dechex(ord($string[$i]));
}
return $hex;
} //十六进制转字符串
function Hex2String($hex){
$string='';
for ($i=0; $i < strlen($hex)-1; $i+=2){
$string .= chr(hexdec($hex[$i].$hex[$i+1]));
}
return $string;
} $str = "abc";
$key = "310A54B3C9C12920E1582E016F15DD441ACE8553769E8991";
$decodedKey = pack("H*", $key); //十六进制转字符串
$hash = hash_hmac("sha1", $str, $decodedKey, true);
//字符串转字节数组,即ascii数组
$hashs = str_split($hash);
foreach ($hashs as $index => $value) {
if (ord($value) > 128) {
$hashs[$index] = ord($value) - 128 * 2;
} else {
$hashs[$index] = ord($value);
}
}
$signature = String2Hex(toStr($hashs));
echo $signature;
认证加密算法php hash_hmac和java hmacSha1的问题的更多相关文章
- Java HmacSHA1算法
Java HmacSHA1算法 public static String hmacSha1(String src, String key) { try { SecretKeySpec signingK ...
- Java HMAC-SHA1加密算法的实现
public static String hamcsha1(byte[] data, byte[] key) { try { SecretKeySpec signingKey = new Secret ...
- cas sso单点登录系列3_cas-server端配置认证方式实践(数据源+自定义java类认证)
转:http://blog.csdn.net/ae6623/article/details/8851801 本篇将讲解cas-server端的认证方式 1.最简单的认证,用户名和密码一致就登录成功 2 ...
- 加密算法:DigestUtils与java MessageDigest
1.使用Spring的DigestUtils public class StringUtilTest { static final String TARGET = "changeme&quo ...
- SSO单点登录系列3:cas-server端配置认证方式实践(数据源+自定义java类认证)
落雨 cas 单点登录 本篇将讲解cas-server端的认证方式 1.最简单的认证,用户名和密码一致就登录成功 2.配置Oracle的jdbc数据源,通过spring动态查询数据库 3.配置orac ...
- CCF认证201803-2 碰撞的小球 java代码实现。
问题描述 数轴上有一条长度为L(L为偶数)的线段,左端点在原点,右端点在坐标L处.有n个不计体积的小球在线段上,开始时所有的小球都处在偶数坐标上,速度方向向右,速度大小为1单位长度每秒. 当小球到达线 ...
- Java Web系列:JAAS认证和授权基础
1.认证和授权概述 (1)认证:对用户的身份进行验证. .NET基于的RBS(参考1)的认证和授权相关的核心是2个接口System.Security.Principal.IPrincipal和Syst ...
- Java加密技术(四)非对称加密算法RSA
RSA 这样的算法1978年就出现了.它是第一个既能用于数据加密也能用于数字签名的算法.它易于理解和操作.也非常流行.算法的名字以发明者的名字命名:Ron Rivest, AdiShamir ...
- Java 密码学算法
Java 密码学算法 候捷老师在< 深入浅出MFC 2e(电子版)>中引用林语堂先生的一句话: 只用一样东西,不明白它的道理,实在不高明 只知道How,不知道Why,出了一点小问题时就无能 ...
随机推荐
- failover swarm 故障转移
#故障转移 Failover #当其中一个节点关闭宕机时,其节点中的service会转移到另一个节点上.Swarm会检测到node1发生故障并把此故障节点的状态标记为Down; docker node ...
- luogu5007 DDOSvoid 的疑惑 (树形dp)
我们来算每个点出现在的集合的个数 设f[i]为i出现的集合个数,g[i]是只选子树i 可以有多少种选法 那就有$g[i]=1+\prod\limits_{j是i的孩子}{g[j]} , f[i]=f[ ...
- Python3 与 C# 扩展之~模块专栏
代码裤子:https://github.com/lotapp/BaseCode/tree/maste 在线编程:https://mybinder.org/v2/gh/lotapp/BaseCode ...
- 阿里云 docker连接总报超时 registry.cn-hangzhou.aliyuncs.com (Client.Timeout exceeded while awaiting headers
Error response from daemon: Get https://registry.cn-hangzhou.aliyuncs.com/v2/: net/http: request can ...
- spring boot 连接mysql mongodb with jpa
https://github.com/bigben0123/gs-accessing-data-mysql-mongo-jpa
- 【UVA】11400 照明系统设计 排序+dp
题目中有一个重要的信息是:每一种灯泡只能换成比它电压更大的灯泡,因此电压的大小限制了状态的转移.因此,在这里按照电压从小到大把每种灯泡排序,使得在考虑后面的灯泡时,前面的灯泡自然可以换成后面的灯泡.状 ...
- 第三十五篇-AppBarLayout的使用
效果图: 添加appbarlayout到xml文件中,然后在toolbar下面添加一个imageview并设置居中放置,我放置的是上面那个安卓的图标. 根据之前学过的toolbar那一节,结合view ...
- 用tkinter制作签名设计窗口
效果如下: from tkinter import * from tkinter import messagebox import requests import re from PIL import ...
- c++ stl sort
两者相等时,必须为false. 满足拟序. 群里大佬666.
- hdu 4333"Revolving Digits"(KMP求字符串最小循环节+拓展KMP)
传送门 题意: 此题意很好理解,便不在此赘述: 题解: 解题思路:KMP求字符串最小循环节+拓展KMP ①首先,根据KMP求字符串最小循环节的算法求出字符串s的最小循环节的长度,记为 k: ②根据拓展 ...