개발관련/암호화 2009. 12. 31. 15:34

해쉬 알고리즘으로 가장 많이 사용하는 SHA-1 알고리즘을 중심으로 살펴보면 보면

 

먼저 JDK에서 제공하는 MessageDigest Class를 이용하면 아래와 같이 매우 간단하게 구현할 수 있다. 

 

import java.security.MessageDigest;

import org.bouncycastle.util.encoders.Base64;

...

 

String s1 = "ABCDEFG";
String s2 = "12345678901234567890123456789012345678901234567890";

 

MessageDigest digest = MessageDigest.getInstance("Sha1");
byte[] res1 = digest.digest(s1.getBytes());
byte[] res2 = digest.digest(s2.getBytes());
    
    
System.out.println("결과값크기= "+res1.length+" 결과값= "+new String(Base64.encode(res1));
System.out.println("결과값크기= "+res2.length+" 결과값= "+new String(Base64.encode(res2));

 

7바이트 s1과 50바이트 s2를 각각 해쉬 하였을 때 출력되는 값은 다르지만 그 길이는 SHA-1 알고리즘의 경우

항상 20바이트가 된다.

 

JDK에서 제공하는 해쉬 알고리즘은 SHA1과 MD5과 같은 제한된 알고리즘인데 반하여 OPENCJCE에서는

보다 다양하고 안전한 알고리즘을 제공한다. 이를 이용한 SHA-1 구현은 다음과 같다.

 

import org.bouncycastle.crypto.digests.GeneralDigest;
import org.bouncycastle.crypto.digests.SHA1Digest;
import org.bouncycastle.util.encoders.Base64;

 

...

 

GeneralDigest sha1digest = new SHA1Digest();

//다이제스트 결과로 얻어질 버퍼

byte[] res3 = new byte[sha1digest.getByteLength()];
   
sha1digest.update(s1.getBytes(), 0, s1.getBytes().length);
sha1digest.update(s2.getBytes(), 0, s2.getBytes().length);  
  
sha1digest.doFinal(re3,0);
System.out.println(new String(Base64.encode(res3)));

스크랩 :
http://blog.paran.com/blog/detail/postBoard.kth?blogDataId=27859061&pmcId=javacipher&totalCount=13&preViewPage=0&ajaxPage=1&preFBlogId=35385570&preLBlogId=27788506&pageStyle=null&myCateId=0&yearMonth=null&rDay=null&style=Board&p_eye=


posted by 제스트
: