MD5加密示例

MD5加密

byte:1字节, 8位二进制 等同 2位16进制

	
    /**
     * MD5加密:
	 * 第一步: 获得 MessageDigest对象
	 * 第二步:需加密的字符串进行转 byte[]
	 * 第三步:使用md5对象,对需要加密的 byte[] 加密处理 数组长度16位
	 * 第四步:byte[] 转16进制,共计32位
    */
	@Test
	public void testMD5_1() throws Exception {
		String keyString = "你好,世界!";
		MessageDigest md5 = MessageDigest.getInstance(MD5); // import java.security.MessageDigest;
		byte[] sourBytes = keyString.getBytes(CHAR_SET); // sourBytes数组长度,根据具体内容,长度不定
		byte[] digestBytes = md5.digest(sourBytes); // MD5加密后 digestBytes数组长度为 16,长度固定
		String digestString = getDigestString(digestBytes); // 对MD5加密后的数据,按16进制拼接数据,32位,长度固定
		System.out.println(digestString);
	}
	
	@Test
	public void testMD5_2() throws Exception {
		String keyString = "你好,世界!";
		MessageDigest md5 = MessageDigest.getInstance(MD5); // import java.security.MessageDigest;
		md5.update(keyString.getBytes(CHAR_SET));
        byte[] digest = md5.digest("".getBytes(CHAR_SET));
		String digestString = getDigestString(digest);
		System.out.println(digestString);
	}
	
	/**
	 * 不能  使用 sb.append(Integer.toHexString(0x000000ff & temp))
	 * 原因:当对应的byte值为0时,忽略,不拼接字符串,无法保证 32位,只能使用如下方式,
	 */
	private String getDigestString(byte[] digestBytes) {
		StringBuffer sb = new StringBuffer();
		for (byte temp : digestBytes) {
			sb.append(Integer.toHexString((0x000000ff & temp) | 0xffffff00).substring(6));
		}
		return sb.toString();
	}

 

你可能感兴趣的:(MD5加密示例)