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

앞의 글에서 Padding에 대한 내용을 이야기 하면서 Padding을 하지 않을 경우
개발자가 임의로 SEED 알고리즘을 기준으로 할 때 128비트(16바이트)블럭으로
암호화할 데이터를 가공해 주어야 한다고 한 바 있다.

 

암호화 서비스에 대한 활발한 구현이 진행되기 이전에 구현된 어플리케이션을 보면
Padding을 미쳐 구현하지 않아서(초기에 제공된 SEED 소스만 하더라도 Padding은
제공소스에서 제외)개발자가 임의적으로 16바이트 블럭을 만들어서 Padding을
하지 않는 방법으로 암호화를 하곤 하였다.

 

예를들면 패스워드 "abcd1234"를 암호화를 할때 "abcd1234        "처럼 공백으로
16바이트를 만들어서 암호화하곤 했는데 재밌는 사실은 16바이트를 암호화할 때
Padding을 하면 32바이트가 되지만 Padding을 하지 않으면 16바이트가 된다.

 

 

//Padding을 할 경우에는 다음과 같이 선언을 하였을 것이다.

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

 

...(중략)...
PaddedBufferedBlockCipher blockCipher = new PaddedBufferedBlockCipher(
    new SEEDEngine());
...(중략)...


//Padding을 하지 않을 경우는 다음과 같다.

...(중략)...
BufferedBlockCipher blockCipher = new BufferedBlockCipher(
    new SEEDEngine());
...(중략)...


Paddig을 하지 않았을 때 만약에 암호화할 데이터가 다음과 같이 16바이트 블럭이 아닐 경우

byte[] data = { (byte) 0x00, (byte) 0x11, (byte) 0x22, (byte) 0x33,
  (byte) 0x44, (byte) 0x55, (byte) 0x66, (byte) 0x77,
  (byte) 0x88, (byte) 0x99, (byte) 0xaa, (byte) 0xbb,
  (byte) 0xcc, (byte) 0xdd, (byte) 0xee, (byte) 0xff, (byte) 0x33 };
  
  
DataLengthException이 발생할 것이다.

posted by 제스트
: