Web

NGINX에서의 REMOTE_ADDR 오류 이슈

NGINX에서 캐시서버를 타면 동일 IP를 두개를 연결지어 가져오는 오류로 이로 인해 IP를 제대로 인식하지 못한다. NGINX 서버에서의 가져온 IP 값 111.111.111.111, 111.111.111.111 정상적으로 가져온 IP 값 111.111.111.111   위와 같은 케이스가 생길 수 있기에 반드시 getRemoteAddress 메소드에서 아래와 같이 처리를 같이 해줘야 한다.  

삼성 갤럭시에서 특수문자에 css 효과가 안먹는 증상

다음과 같이 리뷰 rating 기능을 개발 중 가급적 이미지는 사용하지 않기 위해 특수문자를 사용했습니다. 그랬더니 유독 Android kitkat 4.4을 OS로 사용하는 삼성의 갤럭시 기기들만 다음과 같이 보입니다. 이곳에는 어떤 CSS 효과도 적용되지 않았습니다. 결국 전 이미지를 사용하긴 했지만 여기저기 찾아보니 아래와 같이 [box type=”info”] /system/fonts/NotoColorEmoji.ttf[/box] 삼성의 기본 이모지 폰트를 안드로이드 기본 emoji 폰트로 대체하고 해결되었다… 더 보기 »삼성 갤럭시에서 특수문자에 css 효과가 안먹는 증상

네이버 신디케이션 워드프레스 플러그인

네이버 신디케이션 플러그인 [button link=”http://wordpress.org/plugins/naver-syndication” type=”big” newwindow=”yes”] 플러그인 다운로드[/button]   주요기능 관리자내에서 컨텐츠의 타입(web, blog) 중 선택할 수 있음 Permalink를 사용 중인 사이트만 사용 가능 사이트 상태를 체크   추후지원 컨텐츠의 복구/삭제시 신디케이션 기능 지원 카테고리 등록일자 지원 (대안 마련 필요) 기능 작동 위주로 만들어져 추후 코드 정리 필요 사용자 정의된 post_type에 대한 지원이 안됨 (현재… 더 보기 »네이버 신디케이션 워드프레스 플러그인

워드프레스를 위한 다음뉴스 플러그인

다음뷰가 올해안에 없어질 예정이고, 그런 정책이 나오면서 다음뉴스 송고 API도 방식이 변경되었습니다. 이에 따라 워드프레스의 컨텐츠를 원하는 뉴스채널로 송고해주는 API를 워드프레스 플러그인으로 개발하게 되었습니다. 죄송하지만 무료는 아니구요! 필요하신 분께서는 qnibus@me.com 으로 문의 주시면 성심성의껏 답변드리겠습니다. 단, 뉴스검색제휴는 위 그림과 같이 가입할 수 있는 매체가 제한적이기 때문에 사용하기전 반드시 입점가능 여부를 타진하고 문의주세요!   플러그인 소개… 더 보기 »워드프레스를 위한 다음뉴스 플러그인

앱 통계를 내 사이트에서 수집하기

  프롤로그 모바일 앱을 보유하고 있다면 누구나 한번쯤 다운로드 혹은 리뷰 데이터를 한곳에 수집해서 보고 싶어했으리라 생각합니다. 2년전 회사에서 이런 요구가 있었고 이를 사내 사이트에 구현했던 일이 어렴풋이 기억납니다. 그때는 API가 따로 없어서 rss피드와 국가코드, 카테고리 정보등을 별도로 수집해서 사용했었는데요! 이제는 그렇게 하지 않아도 됩니다. 앱애니(AppAnnie)라고 하는 사이트에서 올 초부터 API를 지원하기 시작했기 때문입니다. 전… 더 보기 »앱 통계를 내 사이트에서 수집하기

APNS 따라하기 시리즈 (프로바이더 구성하기)

프로바이더에서의 개발 개요 두번째 시리즈인 프로바이더에서 개발 방법에 대해서 알아보겠습니다. 이미 인증서 만들기에서 제작한 apns.pem 인증서 파일을 FTP 프로그램을 이용해 임의의 경로로 업로드 합니다. 보통 웹루트내에 파일을 올리면 주소나 파일명만 알면 바로 다운로드 받아갈 수 있기때문에 가급적 웹루트가 아닌 곳에 올려주시기 바랍니다. 이 인증서로 APNS 서버와의 통신을 통해 인증을 받고 인증을 받은 상태에서 Payload에 애플이… 더 보기 »APNS 따라하기 시리즈 (프로바이더 구성하기)

크롬의 개발자툴 스킨 바꾸기

시작하며 웹개발하실때 크롬은 거의 필수품이라 많이들 쓰시리라 생각합니다. 크롬 개발자도구에서 사용할 아주 괜찮은 스킨이 하나 나와서 소개하려고 합니다. 왠지 ST2에서 사용하는 테마와 느낌이 유사해서 그런지 더 마음에 드네요! 우선 뭘 소개하려는 것인지 밑에 이미지를 봐주세요!   변경 전모습 크롬 적용 전   변경 후모습 크롬 적용 후   나만의 스타일 만들기 우선 크롬 개발자 도구의… 더 보기 »크롬의 개발자툴 스킨 바꾸기

PHP로 구현한 SEED128 + CBC + PKCS5 암호화

SEED 암호알고리즘
SEED를 제공하는 인터넷진흥원 사이트 스크린샷

 

Prologue

회사에서 미션이 하나 떨어졌습니다. 한국인터넷진흥원에서 순수 국내기술로 개발된 SEED128을 PHP로 구현하는 것 입니다.
참고로 한국인터넷진흥원에서 JAVA나 C언어로는 SEED소스를 제공하고 있습니다. 심지어 안드로이드와 Objective-C도 제공하는데 PHP만 없습니다.
SEED에 관련된 내용은 해당 사이트에서 참고하시기 바라오며, 현재 표준으로 채택되어져 각종 금융기관에서 널리 사용되고 있다는 것만 알고계시면 될 것 같습니다.

SEED 암호화 기술은 블록 암호 알고리즘을 채택하고 있어 통신하기 위한 곳 모두 동일한 Key를 가지고 있어야 암호화와 복호화가 가능합니다.
저 역시 금융기관쪽과 중요한 데이터를 통신을 하기 위해서 사용하는 것 이며 해당 금융기관쪽은 자바로 이미 구현되어 있어 동일한 Key를 가지고 저희쪽 PHP로 암/복호화가 가능해야 합니다.
사실 말이 PHP로 구현하는 것이지 Native 언어는 명확한 기준으로 변수타입들이 정해져 있기라도 하지만 웹 전용으로 유연하게 만들어진 PHP에서 지원할리 없기때문에 무수한 삽질이 예상되었습니다.

우선 검색하기 시작했습니다. 다행히도 SEED자체에 대한 프로세스는 PHP로 구현해놓으신 분이 계셨습니다. 아래에서 class.seed.php를 다운로드 받으시면 됩니다.
다시한번 이자리를 빌어 정말 감사드립니다.

출처: http://docs.cena.co.kr/textyle/15770

하지만 위의 소스는 순수하게 SEED만 구현해 놔서 제가 원하는 것을 구현하기에는 부족했으며, 기존 class.seed.php 클래스는 운영체제가 64bit인 경우 Integer의 Max값이 커지다보니 라운드키의 정수값을 오버플로우 시키지 못하는 증상으로 인해 값을 제대로 출력하지 못하는 문제가 있어 이 부분은 별도로 해결했습니다.

[box type=”info”]자바는 플랫폼에 관계없이 32비트 고정이지만, PHP는 플랫폼에 따라 32비트면 정수의 최대값이 2147483647이고, 64비트면 9223372036854775807로 자동으로 할당됩니다.[/box]

암호화를 운용하기 위해서 저의 경우에는 CBC와 PKCS5 방식으로 구현을 해야하며 통상적으로 검색하면 나오는 IV의 값도 PHP에서 사용하는 랜덤 스트링 형태가 아닌 자바와 동일하게 바이트 배열로 정해진 값을 만들어서 써야 하기 때문에 본젹적인 개발과 검색에 들어가기 시작했습니다. 말 자체를 이해 못하시는 분들을 위해 용어에 대한 정의들 부터 살펴보겠습니다.

 

암호 블록 체인 방식 (CBC)

그림을 보면 더 이해가 잘 되야 하는데~ 저는 이런 그림을 별로 좋아하지 않아서 이해가 잘 되지 않았습니다.
간단하게 설명하면 이전 블록의 암호문을 현재 평문 블록을 암호화할 때 사용하면서 운용하는 모드입니다. 따라서 같은 평문들도 서로 다른 암호문 블록으로 순차적으로 암호화가 이루어지게 됩니다. 하지만 처음 나오는 평문을 암호화할 암호문이 없기 때문에 보통 랜덤으로 만들게 되며 이를 IV(초기화 벡터)라고 합니다.
평문의 첫번째 블록이 IV와 XOR을 수행하고 나서 암호화를 수행하게 되며 다음은 그 암호화된 블록이 평문의 다음블록을 XOR하는 식으로 평문 블록을 마칠때까지 반복하는 구조입니다. 이게 저도 수도 없이 봤지만 쉽게 이해가 되지 않더군요! 그래도 이해하고 넘어가셔야 합니다. 아래는 위키피디아에서 발췌한 이미지를 첨부하였으며 이해가 안되시는 내용은 구글링을 통해 확인하시기 바랍니다.

Cbc encryption.png
CBC 운영모드에서의 암호화
Cbc decryption.png
CBC 운영모드에서의 복호화

더 보기 »PHP로 구현한 SEED128 + CBC + PKCS5 암호화

코드 편집기 Sublime Text 2 소개

  Prologue 보통 에디터하면 PHP/HTML/CSS 자동완성으로 좀더 편리하게 코딩할 수 있는 도구라고 생각하고 있습니다. 저도 메모장부터 시작했지만 맥에서는 Coda를 사용하고 PC에서는 EditPlus를 사용해왔습니다. 하지만 이제 떠날때가 온 것 같습니다. [box] 가볍고 확장성이 뛰어난 Sublime Text 2라는 에디터를 소개합니다.[/box] 혹 할만한 동영상을 찾지 못해 간단한 Feature에 대해서 설명해놓은 동영상을 첨부했습니다. Sublime Text 2 사이트의 메인페이지를 보시면 다른… 더 보기 »코드 편집기 Sublime Text 2 소개

IE9 이하에서 HTML5 사용을 위한 필수요건

현재 회사 프로젝트 홈페이지 구축하면서 IE에서 버전 및 쿼크/표준모드에 따라 레이아웃이 무너지는 증상을 잡기 위해 사용중인 것들입니다. 몇년을 IE 신경안 쓰다가 다시 IE를 신경쓰면서 작업하려고 하니 미칠 것 같습니다. ㅋㅋ 특히나 IE8에서 레이아웃이 무너지는데 저 같이 고생하시는 분들 없으셨으면 합니다.   IE9 미만에서 HTML5 엘리먼트 지원 (구글 코드에서 다운로드)     JavaScript <br /> <!–[if… 더 보기 »IE9 이하에서 HTML5 사용을 위한 필수요건

팝업에서 부모창의 iframe으로 접근하기

새로운 회사에 이직해 정말 오랫만에 자바스크립트를 만지다 보니 많이 헷갈립니다. 제가 근무하는 곳은 주로 IE위주로 작업이 되어 있어 타 브라우저에서 작동 안되는 경우가 많습니다. 이것들을 언제 고치나 앞이 캄캄하기도 하지만 덕분에 좀더 깊이 있게 배울 수 있지 않을까 하는 마음으로 첫 테이프를 끊습니다. 부모창에서 iframe을 두고 그 iframe에 팝업 호출 함수를 통해 팝업을 띄우는 방식에 대해서… 더 보기 »팝업에서 부모창의 iframe으로 접근하기