해쉬 알고리즘으로 가장 많이 사용하는 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=