python,C#,JAVA字符数组byte[]的MD5

         JAVA,C#的md5参数和传参都是byte[].所以在这两个语言里面,MD5的计算可以进行通用,其实也是进行数据的校验。但是python就不一样,传参是String。研究了一下,得出了代码,分享下,以便大家使用。


       Java版本如下:

byte[] src = {0x25,0x25,0x01,0x00,0x15,0x00,0x01,0x03,0x58,0x68,(byte)0x80,0x00,0x00,0x01,0x60,0x15,0x01,0x13,0x25,0x03,0x00};
		try {
			MessageDigest md5 = MessageDigest.getInstance("MD5");
			byte[] arrBTmp = md5.digest(src);
			System.out.println("MD5:   " + byteArr2HexStr(arrBTmp));
		} catch (NoSuchAlgorithmException e) {
			e.printStackTrace();
		}

其中byteArr2HexStr如下:

public static String byteArr2HexStr(byte[] arrB) {
		int iLen = arrB.length;
		// 每个byte用两个字符才能表示,所以字符串的长度是数组长度的两倍
		StringBuffer sb = new StringBuffer(iLen * 2);
		for (int i = 0; i < iLen; i++) {
			int intTmp = arrB[i];
			// 把负数转换为正数
			while (intTmp < 0) {
				intTmp = intTmp + 256;
			}
			// 小于0F的数需要在前面补0
			if (intTmp < 16) {
				sb.append("0");
			}
			sb.append(Integer.toString(intTmp, 16));
		}
		return sb.toString();
	}


C#版本如下:

            byte[] data = { 0x25, 0x25, 0x01, 0x00, 0x15, 0x00, 0x01, 0x03, 0x58, 0x68, (byte)0x80, 0x00, 0x00, 0x01, 0x60, 0x15, 0x01, 0x13, 0x25, 0x03, 0x00 };
            RijndaelManaged rDel = new RijndaelManaged();
            MD5 md5 = new MD5CryptoServiceProvider();
            byte[] output = md5.ComputeHash(data);

也提供一个byte[]转十六进制字符串的方法:

public static String Bytes2HexString(byte[] bytes, int index)
        {
            if (bytes == null || bytes.Length <= 0 || index >= bytes.Length)
            {
                return null;
            }

            StringBuilder builder = new StringBuilder("");

            for (int i = index; i < bytes.Length; ++i)
            {
                String hex = (bytes[i] & 0xFF).ToString("X");
                if (hex.Length < 2)
                {
                    builder.Append('0');
                }

                builder.Append(hex);
            }
            return builder.ToString();
        }


python版本如下:

from hashlib import md5
if __name__ == "__main__":
    src = [0x25,0x25,0x01,0x00,0x15,0x00,0x01,0x03,0x58,0x68,0x80,0x00,0x00,0x01,0x60,0x15,0x01,0x13,0x25,0x03,0x00]
    result = md5(bytearray(src)).hexdigest()
    print result 

以上所有版本生成的十六进制的字符串为:

02289c2c3d180fe71af860653a1d6132

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值