Java에서 DES 사용하기
Java에서는 javax.crypto 패키지에서 암호화 기능을 제공하는데 Cipher 라는 클래스를 통해 다양한 암호화 알고리즘을 지원한다. 그런데 워낙 다양한 암호화를 지원하다보니 간단한 DES를 이용하는 절차도 간단치 않다. 특히 시크릿키를 설정하는게 복잡해 보였는데, 아래 링크에 설명이 잘 되어 있다.

http://docstore.mik.ua/orelly/java-ent/jnut/ch04_14.htm

아래는 이걸 참조해서 만든 간단한 DES sample.


1 import javax.crypto.Cipher;
2 import javax.crypto.SecretKey;
4 import javax.crypto.spec.SecretKeySpec;
5
6
7 public class tester {
8
9 /**
10 * @param args
11 */

12 public static void main(String[] args) {
13 // TODO Auto-generated method stub
14 System.out.println("testing");
15 try{
16 byte[] keyData = new byte[]{
17 (byte)0xFF, 0x00, (byte)0xFF, (byte)0x00,
18 (byte)0xFF, 0x00, (byte)0xFF, 0x00
19 };
20 byte[] plaintext = new byte[]{
21 (byte)0xFF,(byte)0xFF,(byte)0xFF,(byte)0xFF, 0,0,0,0
22 };
23
24 SecretKey key = new SecretKeySpec(keyData, "DES");
25 Cipher c = Cipher.getInstance("DES");
26 c.init(Cipher.ENCRYPT_MODE, key);
27 byte[] ciphertext = c.doFinal(plaintext);
28 System.out.printf("%x%x%x%x%x%x%x%x",
ciphertext[0],ciphertext[1],ciphertext[2],ciphertext[3],
ciphertext[4],ciphertext[5],ciphertext[6],ciphertext[7]);
29
30 } catch (Exception e){
31 e.printStackTrace();
32 }
33 }
34
35 }


by conanoc | 2009/11/27 12:41 | Programming | 트랙백 | 덧글(0)
공부 잘하는 법
글을 시작하기 전에 먼저 오해의 소지를 없애기 위해 한마디 하자면 이 글이 자기 자랑의 목적이 아니라는 것. 하지만 쓰다보면 어느 정도 그런 내용이 들어갈 수 밖에 없을테니 혹시 이 글을 읽게 될 익명의 독자들은 양해를 해주시길. 이 글을 쓰게된건 어느날 갑자기 초등학교 입학식때가 생각나서였고, 그러면서 한번도 궁금해 하지 않았던 것이 궁금해졌기 때문이다. 왜 내가 공부를 잘했을까 하는.

공부를 정말 잘 하긴 한건가 하는 질문은 답변하기 쉽지않다. 상대적이기 때문인데, 그래도 상위권에 속했다고 할수는 있겠다. 상위 3%정도. 상위 1%에는 못들었던것 같고. 초등학교때는 반에서 가끔 1등 하던 정도였는데, 중학교때는 항상 1등이었고, 그래서 과학고등학교에도 들어갈 수 있었고, 좋은 대학도 나왔다. 고등학교 이후로는 주변에 워낙 더 잘하는 친구들이 많아서 잘한다는 생각보다는 못한다는 생각을 더 많이 해야 했지만. 어쨌거나 일반적인 관점에서 평가해보면 공부 잘하는 축에 속했다고 볼 수 있겠다.

그런데 왜 잘했을까 하는건 확실히 생각해볼 문제다. 나는 그다지 머리가 좋은 편은 아니기 때문이다. IQ 테스트 결과도 아주 평범한 수준이고, 바둑이나 장기, 오목 같은걸 하는 걸 봐도 그렇고, 기억력이나 암기력도 별로고, 암산 같은것도 잘 못하고, 퍼즐도 그다지 잘 푸는 편이 아니다. 어느것 하나 똑똑함을 드러낼 수 있는게 없는 것을 미루어 보건데 머리가 좋아 공부를 잘했던건 아니다.

그럼 열심히 했기 때문일까? 이건 어느 정도는 맞다. 중학교 이후로는 정말 열심히 했으니까. 하지만 초등학교때는 별로 공부한 기억이 없다. 초등학교때보다 중학교때 성적이 약간 좋다고 할 수 있겠지만 사실 그 차이는 매우 미미한데, 투자한 노력은 엄청난 차이가 있다. 결과만 비교한다면 매우 비효율적인 투자였던 것 같기도 하고, 어쨌거나 투자한 노력에 비례했다고 볼 수는 없는것 같다.

그럼 좋아했기 때문인가? 공부하는게 재밌다거나 좋다거나 하지는 않았던것 같다. 나는 책읽는 것도 싫어해서 고등학교 들어가기 전까지는 거의 책을 읽지 않았다. 초등학교때는 시험보기전 잠깐을 제외하고는 거의 공부했던 기억이 없는데, 좋아했다면 좀더 많이 하지 않았을까? 물론 동기 유발의 요인들은 있었다. 초등학교때 성적 좋으면 학교에서 매달 상장이란걸 줬고, 이걸 받아오면 부모님이 좋아하셨다. 그리고 시험성적이 나쁘거나 많이 떨어지면 선생님들이 몽둥이를 들었기 때문에 당연히 이를 피하고 싶었을 것이다. 중학교 이후로 열심히 했던건 좋아서라기 보다는 의무감 같은 것이었던 것 같고, 교과서 내용이 상대적으로 어려워졌기 때문도 있었던 것 같다. 싫었던 건 아니지만 그렇다고 좋았던 것도 아니다.

최근 떠오른 초등학교 입학때의 기억은 이렇다. 벌써 30년도 더 지난 아련한 옛 기억이다. 그때는 국민학교라는 명칭이 사용됐다. 창동국민학교. 지금 지하철 4호선 창동역 바로 옆에 위치한 학교인데, 서울의 변두리에 속했고, 주변엔 주택가와 논밭이 섞여있었다. 지금은 아파트가 빽빽히 들어선 논밭 사이로 난 흙길을 따라 입학식에 참석하러 엄마와 함께 등교했다. 집에서 걸어서 20~30분 정도 되는 거리였지만 전에 형을 따라 많이 다녀본 길이라 혼자서도 찾아갈 수 있었다. 그래서 엄마와 같이 가다가 중간에 나는 다른 길로 빠졌다가 학교 근처 합류하는 길에서 다시 만나서 간게 기억난다. 중간에 신나게 뛰어가다가 넘어진 기억도. 그 당시 초등학교 1학년생들은 대부분 코흘리게 였다. 그래서 한동안 왼쪽 가슴에 손수건을 핀으로 꽂아서들 다녔던것 같은데, 친구들 가슴에 손수건이 달려있던게 인상에 남는다. 첫날 가서 뭘했는지는 기억이 없다. 운동장에 반별로 모였다가 헤어진것 같다.

자. 이제 문제의 장면이다. 집으로 돌아오는 길이었는지, 아니면 집에 돌아와서 였는지 엄마가 이렇게 물었다.
"너 선생님이 내일 학교에 뭐 가져오라고 했는지 알겠어?"
내가 모르겠다고 하자 엄마가 피식 웃으면서 말해줬던 것 같다. 당연히, 학교라는 곳에 처음간 초등학교 1학년짜리가 선생님이 말해준 준비물을 제대로 들었을리가 없었을 것이고, 들었다고 해도 그게 무슨 소리인지 알수 없었을 것이다. 그래도 엄마의 그 말에 난 약간 당황했던 것 같다. 아니, 이 기억은 사실 너무 희미하다. 당황했는지, 정말 엄마가 그런 말을 했는지, 그 다음날 준비물은 제대로 가져갔는지... 모두 너무나 희미하지만 아무튼 그랬던것 같다.
혹시 그때의 당황 이후로 학교에 가서 선생님 말을 아주 집중해서 들었던 것은 아닐까? 엄마가 입학식 이후로도 학교엘 같이 갔는지는 잘 모르겠다. 엄마는 학교에 거의 오지 않는 편이어서 소풍이나 운동회때도 오시지 않았고, 엄마와 함께 등교를 했던 기억은 입학식때가 유일하다.

초등학교 1학년 국어책은 이렇게 시작했던 것 같다. "영희야 가자. 철수야 가자." 당연히 나는 한글을 초등학교 들어가서 배웠다. 7살 우리 딸내미는 벌써 한글을 다 뗐지만 말이다. 난 내 이름과 가족 이름 정도를 쓸 수 있었던 것으로 기억한다. 한글을 배우면서 받아쓰기는 곧잘 했던 것 같고, 4학년때 까지도 글씨쓰기 숙제를 했던 것 같다. 2학년인가 3학년 겨울방학때 미술학원에 한두달 다녔다. 어릴때 그림 그리기를 좋아하긴 했다. 집에서 달력을 뜯으면 그 뒤에 열심히 그림을 그렸다. 하지만 유감스럽게도 미술학원에서 제대로 그림을 배우지는 못했다. 미술학원은 미술 방학숙제를 멋지게 만들어가는걸 도와주는 곳이었다. 내가 다닌 학원은 그게 유일한데, 그 당시에도 보습학원 같은게 있기는 했다. 아이들 대여섯명이 공부방에 가서 그룹과외 같은걸 받기도 하고 한자를 배우기도 했다.

초등학교 성적표는 대체로 우.수. 했다. 초등학교 3학년 때인가.. 학교에서 돌아와서 엄마한테 반에서 3등했다고 약간 으쓱해하며 말했던 기억이 있다. 엄마는 그냥 대수롭지 않게 들었던 것 같다. 마치 운동회때 달리기 해서 3등했다는 얘기 듣드시. 아버지는 상장을 받아가면 한쪽 벽에 붙여두시고 좋아하셨다. 4학년때 약간 좋아하던 여자 아이가 있었는데 그 아이와, 당시 반장을 하던 남자 아이가 번갈아가며 1등을 했던 것 같고 나는 주욱 2등을 했다. 그때는 매달 시험을 봤던 것 같다. 월말고사 라고. 난 시험보기 하루 이틀 전에만 공부를 했다. 교과서에 매 단원마다 단원요약이란게 있었는데, 주로 그걸 외웠던 것 같다.
5학년 이후로는 등수가 어땠는지 기억이 안난다. 어쩌면 교육제도가 잠시 바뀌어서 등수 공개를 하지 않았는지도. 그래도 선생님들의 관심을 통해 짐작할 수는 있다. 반장,부반장 등의 임원을 맡기도 했고, 글도 못쓰는데 백일장 같은 행사에 참석해 글짓기를 하기도 했다. 한번은 6학년때 담임선생님이 방과후에 나더러 조그만 라디오 같은걸 분해했다가 맞춰보라고 시킨적도 있었는데, 물론 전혀 제대로 하질 못했다.

학교에서 내준 숙제를 착실히 했던건 물론 성적에 가장 큰 도움이 됐을 것이고 그게 나로선 유일한 예습과 복습이었다. 숙제를 제대로 안해가던 친구들은 당연히 뒤떨어질 수 밖에 없는 것이고, 시험기간에 아무리 열심히 공부한다고 해도 좋은 성적을 받기는 어려웠을 것이다. 그 당시에 "전과" 라는 보충학습 교재가 흔했다. "동아전과", "표준전과" 등이 유명했다. 아이들은 이걸 공부의 도구가 아니라 숙제의 도구로 활용했기 때문에 공부에는 오히려 방해가 됐을 것이다. 내가 이런 교재를 사지 않은 이유는 잘 모르겠다. 전과가 있다는건 알고 있었지만 필요한건지, 필요없는건지를 몰랐고, 선생님을 포함해서 누구도 이걸 사라는 말을 안했고, 그리고 무엇보다도 다행인건 우리 부모님이 애들 공부에 대한 관심에서 이런 걸 사주는 우를 범하지 않았다는 것이다. 누구도 나에게 공부하라는 말을 하지 않았고, 나는 숙제 외에는 전혀 공부를 하지 않았다.

대충 여기서 정리해야 겠다. 요즘 학원 열풍의 가장 큰 문제는 공부에 필요한게 뭔지 모르는 학부모들이 의욕만 앞서서 돈으로 모든걸 해결하려 한다는 점이다. 학원이건 과외건 본인이 하고자 하는 마음이 없다면 효과가 있을 턱이 없고, 오히려 방해가 될 수 있다. 어떤 형태로건, 가장 중요한건 동기부여가 아닐까 싶다. 적절히 동기를 부여하고, 끼여들지 않고 지켜보고, 그리고 아이가 정말 원하고 잘하는게 공부가 아닌 다른거라면 그걸 잘할 수 있게 도와주는 것.
by conanoc | 2009/11/16 13:24 | Misc | 트랙백 | 덧글(2)
수학자 페렐만 이야기
어제 EBS 다큐프라임에서 아주 잠깐 페렐만에 대한 방송을 봤는데, 오랜 난제였던 푸앙카레 가설을 증명한 러시아 수학자 페렐만이 필즈메달 수상도 거부하고 은둔해서 살고 있다는 내용이었고, 그가 푼 수학문제에 대해서도 소개를 하고 있었다. 페르마 정리의 증명 말고 또 최근에 그런 이슈가 있었나 해서 인터넷에 찾아보니 2006년 경에 꽤나 떠들썩 하게 이슈가 됐었던 것 같다. 필즈메달 수상 거부도 이슈가 되고, 사이언스지 표지(?)에도 올라갔었나보다. 이런거에 관심이 많은 편인데, 왜 모르고 있었을까.
〈100년의 난제 푸앵카레 추측은 어떻게 풀렸을까? - 필즈상을 거부하고 은둔한 기이한 천재수학자 이야기〉라는 제목으로 일본작가의 책도 출간됐고, 여기에 잘 소개가 되어 있다.

그가 해결한 문제 자체는 일반인이 이해할 수 있는 수준은 아닌것 같으니 넘어가고, 그의 기행에 대해서만 좀 살펴보자. 우선 경위를 보면 이렇다.

  1. 백년전(1904)에 푸앙카레라는 유명한 수학자가 가설 하나를 내놓았고, "이걸 푼다면 우주의 비밀에 한걸음 다가갈수 있을거야~" 라고 말했다.
  2. 그보다 4년전인 1900년 파리 국제수학자회의에서, 힐베르트는 20세기에 풀어야할 가장 중요한 문제라며 23개 문제를 내놓았다.
  3. 이후 백년동안 위 23개 문제들은 대부분 풀렸다. 수학자들은 전통을 이어나가기 위해 2000년 파리에서 다시 미해결과제 7개를 내놓았고, 각 문제에 100만불 (12억 정도)의 현상금을 걸었다 (밀레니엄 프라이즈). 이 7대 난제중 하나가 바로 백년 넘도록 해결안되고 있던 푸앙카레 가설이다.
  4. 채 2년이 지나지 않아서 페렐만이 이 문제를 풀어서 저널이 아닌, 저널 아카이브 인터넷 사이트에 "대충 이렇게 풀면 될것 같다" 고 논문을 올렸다.
  5. 이후 페렐만은 친분이 있던 미국 교수의 초청으로 미국으로 건너가 권위있는 수학자들 앞에서 논문을 설명했으나, 이 논문이 해당 분야의 이론이 아닌 전혀 색다른 방식을 이용한 것이어서 전문가들은 눈만 뻐끔일 뿐이었다.
  6. 논문을 검증하는데 꽤 오랜 시간이 걸려서 3년이상 지난 2006년에야 검증이 완료됐다. 하지만 그는 이미 수학계의 스타가 되어 있었다.
  7. 2006년 그에게 수학계의 노벨상인 필즈메달이 수여됐지만 페렐만은 받지 않았고, 유럽수학협회의 상도 거부했다.
  8. 밀레니엄 프라이즈 100만불은 아직 공식적으로 수여되거나 거부됐는지는 분명하지 않지만, 어쨌거나 그가 상금을 찾아가지 않은 것은 분명하다.
  9. 현재 페렐만은 그가 다니던 연구소도 그만두고 엄마 집에서 은둔생활을 하고 있다.
그의 수상거부 및 은둔에 대해 "기행이다", "괴짜다", "천재는 원래 그렇다" 등등의 이야기가 있지만, 박노자 교수는 이게 개인적인 기행이 아니라 수학계 혹은 나아가서 학계 내부의 고질적인 권력문제라고 이야기하기도 했다. 페렐만의 위키피디아에서도 이 의혹을 언급하고 있는데, 논문 검증과정에서 상처를 받았을 수 있다는 것이다.

왜 상을 거부했을까. 수학협회 회장이 페렐만을 찾아가 이틀간 설득하고는 포기했는데, 그 후 페렐만이 이렇게 얘기했다고 한다.
He proposed to me three alternatives: accept and come; accept and don'tcome, and we will send you the medal later; third, I don't accept theprize. From the very beginning, I told him I have chosen the third one…[the prize] was completely irrelevant for me. Everybody understood thatif the proof is correct then no other recognition is needed.

그리고, 검증과정에 대한 불만 혹은 수학계에 대한 불만은 이렇게 표현했다 한다.
I can't say I'm outraged. Other people do worse. Of course, there aremany mathematicians who are more or less honest. But almost all of themare conformists. They are more or less honest, but they tolerate thosewho are not honest.

정확한 내막은 알수 없지만 그가 논문을 낸 이후 주변인들의 반응, 그리고 검증과정에서 마찰들이 있었을 것이고, 염증을 느낀 페렐만은 수학계를 떠났다. 사람들은 돈과 명예를 거부한 천재를 그저 신기한 눈으로 바라보고 있다.

PS.
위에 링크한 밀레니엄 프라이즈에 관한 글은 CMI 홈페이지에 있던 글을 누군가 번역한 것인데, 종종 이런 자료를 검색할때 나는 원본 출처가 어딘가 궁금해서 원본을 추적해 보곤 한다. 대부분은 실패하는데 이번에는 운좋게도 성공했다.

구글에선 시간 범위를 지정해서 검색할 수 있는데, 가장 오래된 글이 이거였다. 출처는 네이버 지식인이라고만 되어있다. 출처를 알려준다는 야후 블로그 검색에서 가장 오래된 글은 위에 링크를 건 이 글. 네이버는 시간 범위를 지정해서 검색할 수 없는데, 다행히 지식인은 시간을 지정할 수 있다. 그래서 이 원본을 찾을 수 있었는데, CMI 홈페이지의 글(지금은 변경되서 찾을 수 없는)을 번역해달라고 지식인에 올린 질문에 답변자가 그 원문을 담고 있던 책을 보고 타이핑해서 올린 것이었다.

by conanoc | 2009/10/22 14:20 | Misc | 트랙백 | 덧글(2)
< 이전페이지 다음페이지 >