java - 安卓 : How to create HMAC MD5 string?

标签 java android hash md5 hmac

<分区>

我正在尝试创建一个 android MD5 哈希字符串来等于下面的 C# 代码:

private string CalculateHMACMd5(string message, string key)
{
     System.Text.ASCIIEncoding encoding = new System.Text.ASCIIEncoding();
     byte[] keyByte = encoding.GetBytes(key);
     HMACMD5 hmacmd5 = new HMACMD5(keyByte);
     byte[] messageBytes = encoding.GetBytes(message);
     byte[] hashmessage = hmacmd5.ComputeHash(messageBytes);
     string HMACMd5Value = ByteToString(hashmessage);
     return HMACMd5Value;
}

private static string ByteToString(byte[] buff)
{
    string sbinary = "";
    for (int i = 0; i < buff.Length; i++)
    {
        sbinary += buff[i].ToString("X2"); 
    }
    return (sbinary);
}


我目前使用的 Android 代码[不生成相同的 C# 代码]:

        public static String sStringToHMACMD5(String sData, String sKey) 
        {
            SecretKeySpec key;
            byte[] bytes;
            String sEncodedString = null;
            try 
            {       
                key = new SecretKeySpec((sKey).getBytes(), "ASCII");
                Mac mac = Mac.getInstance("HMACMD5");
                mac.init(key);
                mac.update(sData.getBytes());

                bytes = mac.doFinal(sData.getBytes());
                StringBuffer hash = new StringBuffer();

                for (int i=0; i<bytes.length; i++) {
                    String hex = Integer.toHexString(0xFF &  bytes[i]);
                    if (hex.length() == 1) {
                        hash.append('0');
                    }
                    hash.append(hex);
                }
            sEncodedString = hash.      
            return sEncodedString;
        }

提前致谢。

最佳答案

public static String sStringToHMACMD5(String s, String keyString)
    {
        String sEncodedString = null;
        try
        {
            SecretKeySpec key = new SecretKeySpec((keyString).getBytes("UTF-8"), "HmacMD5");
            Mac mac = Mac.getInstance("HmacMD5");
            mac.init(key);

            byte[] bytes = mac.doFinal(s.getBytes("ASCII"));

            StringBuffer hash = new StringBuffer();

            for (int i=0; i<bytes.length; i++) {
                String hex = Integer.toHexString(0xFF &  bytes[i]);
                if (hex.length() == 1) {
                    hash.append('0');
                }
                hash.append(hex);
            }
            sEncodedString = hash.toString();
        }
        catch (UnsupportedEncodingException e) {}
        catch(InvalidKeyException e){}
        catch (NoSuchAlgorithmException e) {}
        return sEncodedString ;
    }

关于java - 安卓 : How to create HMAC MD5 string?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8396297/

相关文章:

android - 我可以假设大多数安卓设备都有 wifi direct 吗?

android - 未授予 READ_PRIVILEGED_PHONE_STATE 权限

c - C 中大小为 1K 的列表的哈希实现

android - 无法启动接收器 android.support.v4.media.session.MediaButtonReceiver

C++:关于字符串序列的散列函数的建议,其中字符串的顺序无关紧要

Swift:具有相同属性的不同对象:哈希值

java - 如何删除链表java中的所有偶数

java - 使用 Java 将代理设置添加到 Microsoft Graph 客户端

java - 优先级队列中的已排序与未排序数据 为什么自动排序和排序会等待?

java - 检查二维数组中的相邻图 block