我有这个生成 HMAC (而不是简单的消息摘要)的php代码:
<?php
$key = "0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF";
$binkey = pack("H*", $key);
echo strtoupper(hash_hmac('sha512', "ABC", $binkey));
?>
并与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 = mac.doFinal( datas.getBytes( ) );
byte[] hex = new Hex( ).encode( macData );
result = new String( hex, "ISO-8859-1" );
}
catch ( final NoSuchAlgorithmException e )
{
AppLogService.error( e );
}
catch ( final InvalidKeyException e )
{
AppLogService.error( e );
}
catch ( UnsupportedEncodingException e )
{
AppLogService.error( e );
}
return result.toUpperCase( );
}
但这并不能完成工作,因为对于相同的输入(ABC),其输出为:
AA6492987D7A7AC81109E877315414806F1973CC47B897ECE713171A25A11B279329B1BFF39EA72A5EFB7EDCD71D1F34D5AAC49999A780BD13F019ED99685B80
我尝试了很多其他的Java代码,但没有一个是php版本的精确克隆。
我做错什么了?
您只是忘了模仿pack()
Java代码中的行为(无论您需要使用什么)。
用
final SecretKeySpec secretKey = new SecretKeySpec( DatatypeConverter.parseHexBinary(PayboxConstants.KEY), "HmacSHA512" );
在您的Java代码中。
凡DatatypeConverter.parseHexBinary()
从JAXB
API
。
另外,如果您不想仅出于将HEX字符串转换为字节的目的而包含JAXB,则可能要使用此处发布的代码。
import "crypto/sha512" sha512包实现了SHA384和SHA512哈希算法,参见FIPS 180-2。 Constants func Sum512(data []byte) [Size]byte func New() hash.Hash func Sum384(data []byte) (sum384 [Size384]byte) func New384() hash.H
问题内容: 我正在使用GoLang中的授权模块。在我们将PHP5与crypt函数一起使用之前。哈希生成类似于SHA-512: 并像这样存储在数据库中。但是现在我需要使其在GoLang中也能正常工作。我在Google上进行了搜索,并尝试了不同的方法,例如: 但是所有产生的东西都不一样。谁能进一步帮助我们? 我们要验证并创建类似php版本的哈希。 提前致谢。 问题答案: https://github.
我知道RSA密钥可以使用不同的算法生成。使用,我似乎无法指定密钥生成器应该使用什么算法。我怀疑它使用的是。 如何在bashshell或Ruby中使用不同的算法(例如)生成RSA密钥?库是否支持使用不同的算法生成RSA密钥?如果没有,有人知道我可以使用另一个图书馆吗?(在ruby中,似乎不允许选择算法,但文档对我来说很难遵循soo…?) 很抱歉,如果这个问题已经得到了回答,但我还没有找到答案。 也许
我尝试了很多其他java代码,但没有一个是php版本的完全克隆。 我做错了什么?
我正在迁移一个使用Passlib 1.6.2生成密码哈希的平台。加密密码的代码是(调用哈希时使用轮次的默认值): 输出格式如下所示(对于密码“patient3”(无引号)): 我看得出来代表着: 算法SHA512 迭代10001 盐0DR7V7EWUMPTRFW.9Z6HKA(可能) Passlib算法是在他们的站点上定义的,它的内容如下:
我有以下PHP代码: 如何在android(java)中实现同样的功能。 我已经尝试了hmac sha512可用的几种方法,但php代码段的结果与我的不同。 提前致谢