public static String getHash (String hashThis)
	{
		String hashType = "MD5";
		String encodingType = "UTF-8";
		StringBuffer hexString = new StringBuffer ();
		MessageDigest digester = null;
		byte[] byteDigest = null;
		byte[] bytesOfInput = null;
		
		/** Set our digester type to MD5 */
		try
		{
			digester = MessageDigest.getInstance(hashType);
		}
		catch (NoSuchAlgorithmException nsae)
		{
			System.out.println ("[ERROR] Requested hash function \"" + hashType + "\" is unsupported.");
		}
		
		/** Convert input into an array of bytes using specified encoding format */
		try
		{
			bytesOfInput = hashThis.getBytes(encodingType);
		}
		catch (UnsupportedEncodingException uee)
		{
			System.out.println ("[ERROR] Requested encoding type \"" + encodingType + "\" is not supported.");
		}
		
		/** Digest the input byte array */
		if (digester != null)
		{
			byteDigest = digester.digest(bytesOfInput);
		}
		
		/** Turn outputs into something legible, not that other garble */
		for (int i = 0; i < byteDigest.length; i++)
		{
			int representation = byteDigest[i] & 0xFF;	//OHGOD, turns out the "& 0xFF" part is REALLY important! WHY?!
			
			if (representation < 0x10)
			{
				hexString.append('\u0030');	//Put that leading zero back on the byte if it's under 0x10.
			}// '\u0030' is the hex value for '0'.
			
			hexString.append(Integer.toHexString(representation));	//Finally, add the resulting byte in base 16 to the output.
		}
		
		
		return hexString.toString();	//Return as a string because other programmers don't like playing with StringBuffers.
	}