MD5码

前后端关于关键信息数据论证,防止被篡改了,需要MD5码比对校验,以保证数据的准确可靠。本人参与的公司项目前端使用Unity C#,后台是Java实现的。因此,在这里贴出自己写的MD5生成的工具类。
服务端Java代码实现如下:

public class Md5Util {
    private static final ThreadLocal<MessageDigest> MESSAGE_DIGEST_CACHE = new ThreadLocal<MessageDigest>();
    private static char md5Chars[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};


    /**
     * 获取一个字符串的md5码
     * @param str  源串
     * @return     md5码
     */
    public static String getMD5Str(String str) {
        try {
            MessageDigest messagedigest = getMessageDigest();
            messagedigest.update(str.getBytes("UTF-8"));
            return bufferToHex(messagedigest.digest());
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

    private static MessageDigest getMessageDigest() throws NoSuchAlgorithmException {
        MessageDigest messagedigest = MESSAGE_DIGEST_CACHE.get();
        if (messagedigest == null) {
            messagedigest = MessageDigest.getInstance("MD5");
            MESSAGE_DIGEST_CACHE.set(messagedigest);
        }
        return messagedigest;
    }

    private static String bufferToHex(byte bytes[]) {
        return bufferToHex(bytes, 0, bytes.length);
    }

    private static String bufferToHex(byte bytes[], int m, int n) {
        StringBuffer stringbuffer = new StringBuffer(2 * n);
        int k = m + n;
        for (int l = m; l < k; l++) {
            appendHexPair(bytes[l], stringbuffer);
        }
        return stringbuffer.toString();
    }

    private static void appendHexPair(byte bt, StringBuffer stringbuffer) {
        char c0 = md5Chars[(bt & 0xf0) >> 4];
        char c1 = md5Chars[bt & 0xf];
        stringbuffer.append(c0);
        stringbuffer.append(c1);
    }
}

Unity客户端C#实现如下:

/*
 * Author:W
 * MD5码生成工具
 */
using Newtonsoft.Json;
using Newtonsoft.Json.Utilities;
using System.Security.Cryptography;
using System.Text;

public class MD5Utils
{   
    public  static char[] md5CharArr = new char[] { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };
    /// <summary>
    /// MD5字符串加密
    /// </summary>
    /// <param name="content"></param>
    /// <returns>加密后字符串</returns>
    public static string GenerateMD5(string content)
    {
        string md5Str="";

        MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
        byte[] buffer = md5.ComputeHash(Encoding.UTF8.GetBytes(content));

        md5Str = BufferToHex(buffer);

        return md5Str;
    }

    /// <summary>
    /// 将MD5加密后的字节数组转换成16进制字符
    /// </summary>
    /// <param name="buffer"></param>
    /// <returns></returns>
    private static string BufferToHex(byte[] buffer)
    {
        StringBuilder stringBuilder = new StringBuilder();
               
        for (int i = 0; i < buffer.Length; i++)
        {
            AppendHexPair(buffer[i], stringBuilder);
        }

        return stringBuilder.ToString();
    }

    /// <summary>
    /// byte转换16进制
    /// </summary>
    /// <param name="bt"></param>
    /// <param name="stringBuilder"></param>
    private static void AppendHexPair(byte bt, StringBuilder stringBuilder)
    {
        // 取字节中高 4 位的数字转换
        char c0 = md5CharArr[(bt & 0xf0) >> 4];
        // 取字节中低 4 位的数字转换
        char c1 = md5CharArr[bt & 0xf];

        stringBuilder.Append(c0);
        stringBuilder.Append(c1);
    }    
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Data菌

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值