package com.usemodj.forum; import java.io.UnsupportedEncodingException; import java.math.BigInteger; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import org.apache.commons.codec.binary.Base64; import org.apache.commons.codec.digest.DigestUtils; import org.apache.commons.lang.math.NumberUtils; import org.junit.Before; import org.junit.Test; public class PasswordHashTest { @Before public void setUp() throws Exception { } @Test public void testCheckPassword() throws NoSuchAlgorithmException, UnsupportedEncodingException { //fail("Not yet implemented"); String userPass = "jinny3208"; String hashPass = "$P$B4NyoGmPPc708xhxSaDiy7DR98R9GN."; long userId = 2; boolean check = PasswordHash.checkPassword(userPass, hashPass, userId); System.out.println("-- PasswordHash checkPassword: "+ check); System.out.println("-- md5( salt + userPass): "+ md5( hashPass.substring(4, 12) + userPass, "UTF-8")); } public static String md5(String input, String charset) throws NoSuchAlgorithmException, UnsupportedEncodingException { String result = input; if(input != null) { MessageDigest md = MessageDigest.getInstance("MD5"); //or "SHA-1" md.update(input.getBytes( charset)); BigInteger hash = new BigInteger(1, md.digest()); result = hash.toString(16); while(result.length() < 32) { result = "0" + result; } } return result; } @Test public void testMD5() throws UnsupportedEncodingException{ String userPass = "jinny3208"; String hashPass = "$P$B4NyoGmPPc708xhxSaDiy7DR98R9GN."; String md5 = DigestUtils.md5Hex( hashPass.substring(4, 12)+ userPass); System.out.println("-- DigestUtils.md5Hex:"+ md5); md5 = getHexCode( hashPass.substring(4, 12)+ userPass, "utf-8"); // "US-ASCII" System.out.println("-- getHexCode :"+ md5); System.out.println("--md5Hex(hello):"+ DigestUtils.md5Hex("hello")); System.out.println("--md5Hex(4NyoGmPPjinny3208):"+ DigestUtils.md5Hex("4NyoGmPPjinny3208")); } @Test public void testMD5getHexCode() throws UnsupportedEncodingException{ String userPass = "jinny3208"; String hashPass = "$P$B4NyoGmPPc708xhxSaDiy7DR98R9GN."; String md5 = getHexCode( hashPass.substring(4, 12)+ userPass, "utf-8"); System.out.println("-- getHexCode :"+ md5); } public static String getHexCode(String inputValue, String charset) throws UnsupportedEncodingException { MessageDigest md5 = null; try { md5 = MessageDigest.getInstance("MD5"); } catch(Exception e) { e.printStackTrace(); } String eip; byte[] bip; String temp = ""; String tst = inputValue; bip = md5.digest(tst.getBytes( charset)); for(int i=0; i < bip.length; i++) { eip = "" + Integer.toHexString((int)bip[i] & 0x000000ff); //System.out.println(i + " : " + eid); if(eip.length() < 2) eip = "0" + eip; temp = temp + eip; } return temp; } @Test public void testStringToInt(){ //System.out.println(NumberUtils.toInt("a")); //System.out.println(NumberUtils.createInteger("0xaa")); System.out.println(" Integer.MAX_VALUE:"+ Integer.MAX_VALUE + ", Long.MAX_VALUE:"+Long.MAX_VALUE ); System.out.println( Long.parseLong("ffffffff",16)); } @Test public void testPhpPack() throws UnsupportedEncodingException{ String pass = "1234"; //php pack("H*", "1234"); //DigestUtils. byte[] base64 = Base64.encodeBase64( pass.getBytes( "UTF-8")); System.out.println("-- base64:"+ new String( base64, "UTF-8")); //new String() } @Test public void testParseInt16(){ String num = "8d1aa27b"; try { System.out.println("---parse int 16: "+ Integer.parseInt(num, 16)); } catch (NumberFormatException e) { // TODO Auto-generated catch block e.printStackTrace(); } try { System.out.println("---parse Long16: "+ Long.parseLong(num, 16)); } catch (NumberFormatException e) { // TODO Auto-generated catch block e.printStackTrace(); } } @Test public void testMaxValue(){ System.out.println("-- Integer.MAX_VALUE: "+ Integer.MAX_VALUE + " hex: "+ Integer.toHexString( Integer.MAX_VALUE)); System.out.println("-- Long.MAX_VALUE: "+ Long.MAX_VALUE + " hex: "+ Long.toHexString( Long.MAX_VALUE)); } @Test public void testCharOrd(){ int iterationCountLog2 = 8; System.out.println("((int)'0' + iterationCountLog2/10) ="+ ((int)'0' + iterationCountLog2/10)); System .out.println("(int)'0' ="+(int)'0' ); String output =String.valueOf((char)((int)'0' + iterationCountLog2/10)); System.out.println("-- output: "+ output); output =String.valueOf((char)((int)'0' + iterationCountLog2%10)); System.out.println("-- output: "+ output); } }