2014년 10월 15일 수요일

java android md5, sha MessageDigest 속도 비교





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

댓글 없음:

댓글 쓰기