java hmac/sha512 generation

前提是你 提交于 2019-11-28 20:58:44
Uli

You simply forgot to mimic pack()'s behavior in your Java code (whatever you need that for).

Use

final SecretKeySpec secretKey = new SecretKeySpec( DatatypeConverter.parseHexBinary(PayboxConstants.KEY), "HmacSHA512" );

In your Java Code.

Where DatatypeConverter.parseHexBinary() is from the JAXB API.

Alternatively, if you don't want to include JAXB just for the purpose of converting HEX strings to bytes, you might want to use the code posted here.

I use this for SHA 512 in Java. It might help:

public static String sha512 ( String str )
    {
        try
        {
            return sha512 ( str.getBytes ( "UTF-8" ) );
        }
        catch ( UnsupportedEncodingException e )
        {
            e.printStackTrace ( );
            return "";
        }
    }

public static String sha512 ( byte[] array )
{
    try
    {
        MessageDigest m = MessageDigest.getInstance ( "SHA-512" );
        m.update ( array );
        String hash = new BigInteger ( 1, m.digest ( ) ).toString ( 16 );
        while ( hash.length ( ) < 32 )
        {
            hash = "0" + hash;
        }
        return hash;
    }
    catch ( NoSuchAlgorithmException e )
    {
        e.printStackTrace ( );
        return "";
    }
}

I also remember that there is detailed answer about MD-5 in a post in stackoverflow (just the algorythm is different)

try that :

private String generateHMAC( String datas )
{
    MessageDigest md = MessageDigest.getInstance("SHA-512");

    md.update(datas.getBytes("UTF-8")); // Change this to "UTF-16" if needed
    byte[] digest = md.digest();

    StringBuffer hexString = new StringBuffer();
    for (int i=0;i<digest.length;i++) {
        hexString.append(Integer.toHexString(0xFF & digest[i]));
    }

    return  hexString.toString();
}
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!