技术饭

JAVA原生的类实现SHA256加密签名,转换成PHP版本加密

copylian    0 评论    2250 浏览    2021.05.24

JAVA原生的类实现SHA256加密签名,转换成PHP版本加密签名,注意点主要在sort字典排序的时候需要设置方式为 SORT_STRING,如果sha 256加密函数的第三个参数设置为true时,这时候返回的是二进制数据,默认是false返回的则是进制的字符串。

1、signature 的 生成 JAVA示例代码:

//利用java原生的类实现SHA256加密

String getSHA256(String str) {

    MessageDigest messageDigest;

      String  messageDigest = MessageDigest.getInstance("SHA-256");

        messageDigest.update(str.getBytes("UTF-8"));


        //将byte转为16进制

        encodestr = byte2Hex(messageDigest.digest());

        return encodestr;

}


//生成时间戳

Long timestamp = System.currentTimeMillis() / 1000L;


//两个参数进行字典序排序

List<String> paramList = Arrays.asList("${appSecret}", timestamp.toString());

Collections.sort(paramList);


//将两个参数字符串,拼接成一个字符串进行 SHA256 加密

String paramJoinStr = StringUtils.join((String[]) paramList.toArray(), "");


//SHA256 加密

String sha256 = getSHA256(paramJoinStr);


2、signature 的 生成 PHP示例代码:


//组装数据

$signature = [$this->appsecret, time()];


//进行字典排序,不要忘了SORT_STRING

sort($signature, SORT_STRING);

    

//转成字符串

$signature = implode($signature);


//方法1:sha 256加密

$signature = hash('sha256', $signature);

        

//方法2:sha 256加密,设置true则是二进制,bin2hex转成16进制

//$signature = bin2hex(hash('sha256', $signature, true));


//返回数据

return $signature;


参考:

https://www.656463.com/wenda/rhzPHPzzxjavaMessageDigestSHA256_454

https://stackoverflow.com/questions/44963287/how-to-reproduce-java-messagedigest-sha-256-hash-in-php

https://www.php.net/manual/zh/function.hash.php

飓风呀
感谢你的支持,我会继续努力!
扫码打赏,感谢您的支持!
JAVA SHA256 加密签名 PH 

文明上网理性发言!

  • 还没有评论,沙发等你来抢