java에서 messageDigest로 md5,sha를 사용시 성능 비교를 해보았다.
md5계산이나 sha계산을 할때 아래 함수를 사용하도록 한다.
alg 에는 MD2,MD5,SHA-1,SHA-256,SHA-384,SHA-512 다음과 같은 String을 넘기도록 한다.
public static String getMessageDigestString(String input,String alg) { String enc = new String(); MessageDigest md; try { md = MessageDigest.getInstance(alg); md.update(input.getBytes()); byte[] mb = md.digest(); for (int i = 0; i < mb.length; i++) { byte temp = mb[i]; String s = Integer.toHexString(new Byte(temp)); while (s.length() < 2) { s = "0" + s; } s = s.substring(s.length() - 2); enc += s; } } catch (NoSuchAlgorithmException e) { return null; } return enc; }
static long lasttime = 0; static boolean started = false; static long checkToggleRuntime() { long ret = 0; if( !started ){ started = true; lasttime = System.currentTimeMillis(); return 0; } else { started = false; ret = (System.currentTimeMillis() - lasttime); //System.out.println("Time diff:" + ret/1000.0f +"sec"); Log.e("zdg","Time diff:" + ret/1000.0f +"sec"); } return ret; } final static int MD_TEST_COUNT = 1000; public static void checkSpeedMessageDigest() { String input = "!QAZ@WSX#EDC$RFV%TGB^YHN&UJM*IK<(OL>)P:?_{\"+}|1qaz2wsx3edc4rfv5tgb6yhn7ujm8ik,9ol.0p;/-['=]\']"; String[] testAlg = {"MD2","MD5","SHA-1","SHA-256","SHA-384","SHA-512"}; String ret; System.out.println("MD speed test count:" + MD_TEST_COUNT); Log.e("zdg","MD speed test count:" + MD_TEST_COUNT); for(int i=0;i<testAlg.length;i++) { //System.out.println("start:" + testAlg[i]); Log.e("zdg","start:" + testAlg[i]); checkToggleRuntime(); for(int j=0;j<MD_TEST_COUNT;j++) { ret = getMessageDigestString(input,testAlg[i]); if(ret == null){ System.out.println("error:" + testAlg[i]); continue; } } checkToggleRuntime(); } }
결과는 아래와 같았다.
PC와 안드로이드 단말과는 속도차이가 너무 많이 났지만 전체적으로 md5 쪽이 시간적으로 봤을때 우세함을 알 수 있다. 하지만 SHA의 경우 시간차이가 많이 나는 편이 아니라 사용해도 큰 무리는 없어 보인다.
In PC i7 Notebook MD speed test count:100000 start:MD2 Time diff:1.56sec Start:MD5 Time diff:0.286sec start:SHA-1 Time diff:0.32sec start:SHA-256 Time diff:0.475sec start:SHA-384 Time diff:0.591sec start:SHA-512 Time diff:0.75sec In Android MSM8974 MD speed test count:1000 start:MD2 Time diff:0.131sec start:MD5 Time diff:0.188sec start:SHA-1 Time diff:0.283sec start:SHA-256 Time diff:0.586sec start:SHA-384 Time diff:0.717sec start:SHA-512 Time diff:0.873sec
댓글 없음:
댓글 쓰기