본문 바로가기

컴퓨터

일정 길이의 랜덤 문자열 생성하기 파이썬을 이용해서 일정 길이에 해당하는 랜덤 문자열을 생성하는 코드입니다. 여기서 len에는 원하는 문자열의 길이를 int형으로, characters 부분은 랜덤 문자열을 생성하는데 사용하는 문자들을 리스트 혹은 문자열 형태로 주시면 됩니다. import random def rand_str(len, characters): return "".join([random.choice(characters) for _ in range(len)]) 소스코드에도 있는 것처럼 random 모듈을 import를 해야 사용이 가능합니다. 코드에 대한 간략한 설명을 하자면 len에 해당하는 만큼 characters의 원소를 추출해서 (수학적인 용어로는 복원추출) 리스트를 만들고, 그것을 join 메소드를 이용해서 이어 붙이는 ..
네이버 로그인 분석 Python을 이용해 네이버 로그인을 구현하기 위한 분석 내용입니다. 일단 네이버 로그인을 할 때 https 통신을 이용해서 정보를 주고 받기 때문에 Wireshark와 같은 툴을 사용해 패킷을 가져오더라도 암호화가 되어 있어서 그 내용을 알기 어렵습니다. 물론 인증서에 대한 키 값을 알고 있다면 쉽게 복호화가 가능합니다. 또한 Paros나 Burp Suite와 같은 프록시 툴을 사용한다면 중간에 어떤 요청이 들어갔는지를 알아 낼 수 있습니다. 하지만 네이버는 프록시 툴을 이용하더라도 로그인 정보를 알 수 없게 만들었습니다. 여기에서는 어떠한 방식으로 구현을 했는지를 살펴보도록 하겠습니다. 여기에서는 특별한 프로그램을 사용하지 않고 Chrome에서 기본으로 제공하는 기능만을 사용해서 분석을 하겠습니다. ..
모바일에서만 보이는 이미지 아래 사진은 모바일 환경에서만 볼 수 있다. 실제로 테스트를 해보려면 http://imghumit.dothome.co.kr/img/younha.jpg로 들어가거나 혹은 를 이용해서 확인을 해볼 수 있다. 카테고리에서도 알 수 있듯이 PHP를 이용하면 이런 식으로 구현이 가능하다. 이것을 응용하면 IP 대역별로 이미지를 보여줄지 보여줄지 말지, 혹은 다른 이미지를 보여줄 수도 있다.
일정 시간마다 실행하기 Python을 이용해서 일정 시간마다 특정 작업을 반복할 수 있는 skeleton 코드이다. 아래 코드에서 print("Hello, World") 부분을 지우고 원하는 코드를 입력하면 된다. 응용 방법의 경우에는 매우 많은데, 일정 시간마다 글을 작성하도록 하는 봇을 만든다거나 혹은 주식과 같이 일정시간마다 바뀌는 값의 데이터를 저장하는데 쓰일 수 있다. import threading end = False def execute_func(second=1.0): global end if end: return # TODO print("Hello, World!") threading.Timer(second, execute_func, [second]).start() execute_func(2.0) 참고로 계속 돌아..
웹 페이지 파싱을 어렵게 하는 방법 웹 페이지에 있는 데이터를 읽어와서 그 데이터를 가공해서 우리가 원하는 데이터를 뽑아내는 과정을 파싱이라고 합니다. 보통 파싱은 검색 엔진에서의 실시간 검색어 데이터를 가져온다거나 혹은 주식의 현재 주가를 알아내는 등의 과정에서 많이 쓰입니다. 파싱 과정에서 중요한 것은 웹페이지에 있는 데이터를 가져오는 일입니다. 왜냐하면 데이터를 가져오지 못한다면 데이터를 가공하는 과정을 구현했더라도 쓸모가 없기 때문입니다. 대다수의 웹 페이지들은 파싱 프로그램을 좋아하지 않기 때문에 파싱을 하는 프로그램인지 체크를 하고 맞는 경우에는 에러 페이지를 보여주는 일을 합니다. 왜냐하면 파싱 프로그램을 사용하게 되면 페이지에서 광고를 보여줄 수 없기 때문에 수익이 생기지 않고, 트래픽만 잡아먹기 때문입니다. 보통 체크를 하..
mod_rewrite가 적용이 안될 경우 1. phpinfo 페이지에서 mod_rewrite 모듈이 설치되어 있고 활성화가 되어 있는지 확인한다. 확인 방법은 phpinfo.php라는 파일을 생성해서 아래 내용을 입력해서 저장을 하고 페이지에 접속을 해서 ctrl+F로 mod_rewrite를 검색하면 된다. 검색해서 없는 경우에는 설치를 하고 활성화를 시킨다. 2. 검색해서 나오는 경우에는 http.conf 파일을 열어서 아래 부분처럼 바꾸고 apache를 재시작한다. Options Indexes FollowSymLinks MultiViews AllowOverride All Order allow,deny allow from all 참고로 환경에 따라서 이렇게 해도 안되는 경우가 있는데, 그 경우에는 Options ~ 부분만 주석처리를 하면 된다..
거듭제곱 계산하기 RSA 암호화를 하는 과정에 있어서 거듭 제곱을 계산할 필요가 있습니다. $a^n$을 계산할 때 for이나 while 문과 같이 반복문을 이용해서 $n$번을 곱하는 방법이 가장 쉽게 생각할 수 있는 방법입니다. def easy_mod_pow(base, exp, mod): base %= mod result = 1 while exp > 0: result = (result * base) % mod; exp -= 1 return result 이 알고리즘의 경우에는 시간 복잡도를 생각하면 $O(n)$이라는 것을 알 수 있습니다. (반복문이 n번 돌기 때문) 즉 $n$의 값이 크면 그 만큼 속도가 느려진다는 것을 의미하고, RSA 암호화 과정에서는 $n$의 값을 큰 것으로 사용하기 때문에 이러한 방법으로는 어렵다는..
Project 2.0 카카오톡 자동 응답봇 만들기[4] 저번 시간에는 정적인 응답을 보여주는 방법에 대해서 살펴보았습니다. 이번 시간에는 이러한 정적인 응답을 어떻게 하면 동적인 응답으로 바꾸어서 보여줄 수 있는지에 대해서 살펴보도록 하겠습니다. 동적인 응답의 대표적인 예로 주사위 기능을 추가해보도록 합시다. 먼저 이전에 정적인 응답을 만들 때처럼 로그인을 하고, 버튼 추가하기 링크를 클릭합니다. 그리고 아래와 같이 폼의 내용을 채웁니다. 일단 이렇게 하면 '주사위'에 대한 기능이 추가가 되었지만 카카오톡 상에서는 이 기능을 아직 사용할 수 없습니다. 왜냐하면 우리는 '주사위'에 해당하는 keyboard를 생성하지 않았기 때문이지요. 간단하게 Default keyboard에 '주사위'를 추가하도록 합시다. 이전 강의대로 따라오셨다면, keyboard.conf..