做简单的事,做简单的教程

专注移动开发。本博客教程采用知识共享署名-非商业性使用-相同方式共享 2.5 中国大陆许可协议进行许可...

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

阅读更多
文章标签: java md5 python c#
个人分类: JAVA编程
想对作者说点什么? 我来说一句

C#加密转换为java的加密

2012年11月26日 34KB 下载

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭