'Server'에 해당되는 글 2건

  1. 2012.08.26 aes-128을 사용한 app과 server의 통신 1
  2. 2012.05.16 ip공유기(iptime)를 이용한 서버 운영
iOS2012. 8. 26. 13:02

안녕하세요. 팬텀입니다. 
첨부된 파일은 이번 정모에 발표했던 'App과 Server의 은밀한 대화'에 리뷰했던 코드 예제 입니다.
그날 리뷰했던 코드에 urlencoding / urldecoding 관련된 부분이 추가되었습니다.

첨부된 파일을 xcode에서 실행시키면, 뷰에 버튼이 하나 있습니다. 
이 버튼이 parameter와 security token을 만들고, 서버로 request를 보내고,
서버로부터의 결과를 콘솔에 남기는 일을 합니다. 콘솔에서 다음과 같이 확인할 수 있습니다.

 [Session started at 2010-07-21 00:57:01 +0900.]
 -------------------------------------------
[app]
1) param : id=2&point=450&name=%EB%A7%A5%EB%B6%80%EA%B8%B0&nonce=16807
2) st : PysueoNho2uhis%2B8%2FQjpWuSuYdGYA0m4HM969zadxBZIMNwe%2BJle
 -------------------------------------------
[server]
1) result : id=2&point=450&name=맥부기&nonce=16807

endpoint는 코드에 들어있는 http://rockk.org/mcbugi/test.php 입니다. 2주 정도 열어 놓도록 할께요.
서버쪽 코드는 다음과 같구요. 간단하게 st를 복호화 한 값을 그대로 echo 합니다.
app과 key값을 꼭 맞춰주어야 합니다. 아래 붉게 강조된 부분에요. '123456789abcdef'

 <?php
// base64 decode st
$tmp_st = base64_decode(urldecode($_POST['st']));

// decrypt st (key is '123456789abcdef')
$st = urldecode(trim(mcrypt_decrypt(MCRYPT_RIJNDAEL_128, '123456789abcdef', $tmp_st, MCRYPT_MODE_ECB, mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_ECB), MCRYPT_RAND))));

// echo decrypted data
echo $st;
exit;
?>


실제로 사용할 땐, $st 값을 &로 파싱하고, key & value로 활용하면 되지 않을까 싶습니다.

CryptoHelper 관련 참고 url은 아래와 같구요.
http://pastie.org/297563.txt
http://stackoverflow.com/questions/1235171/iphone-how-to-encrypt-a-string

php의 mcrypt와 padding을 다루는 부분에서 차이가 있어CryptoHelper.m의 다음 부분에 kCCOptionECBMode를 추가했습니다.
참고하세요.

 // Create and Initialize the crypto reference.
    ccStatus = CCCryptorCreate(    encryptOrDecrypt, 
                               kCCAlgorithmAES128, 
                               kCCOptionPKCS7Padding | kCCOptionECBMode
                               (const void *)[theSymmetricKey bytes], 
                               kCCKeySizeAES128, 
                               (const void *)iv, 
                               &thisEncipher
                               );


혹시나 해서 발표자료도 공유합니다- :D

App과 Server의 은밀한 대화
View more presentations from rockk.




한글 잘림현상- 아래수정 부분 확인해서 사용하삼
- (NSString*)encryptString:(NSString*)string
{
NSRange fullRange;
fullRange.length = [string length];
fullRange.location = 0;

uint8_t buffer[[string length]];

[string getBytes:&buffer maxLength:[string length] usedLength:NULL encoding:NSUTF8StringEncoding options:0 range:fullRange remainingRange:NULL];

// NSData *plainText = [NSData dataWithBytes:buffer length:[string length]];// 한글 잘림
NSData *plainText = [string dataUsingEncoding:NSUTF8StringEncoding];

NSData *encryptedResponse = [self doCipher:plainText key:symmetricKey context:kCCEncrypt padding:&pad];

return [self base64EncodeData:encryptedResponse];
}

Posted by 다오나무
영삼이의 IT정보2012. 5. 16. 12:08

먼저 서버로 사용하고자 하는 컴퓨터에서 작업하셔야 합니다.

 

1. 브라우져(익스플로러 or firefox)를 열고 공유기 관리 페이지(기본값:192.168.0.1)에 접속합니다



2. 고급 설정 - 내부 네트워크 설정에서 서버로 사용하고자 하는 컴퓨터의 ip를 수동으로 고정합니다. 서버 ip가 변경되면 무용지물이겠죠?^^

수동으로 고정하는 방법은 검색된 IP/MAC주소에서 서버로 사용하실 컴퓨터의 IP혹은 MAC의 체크박스를 체크한 후 추가 버튼을 누르면 왼쪽의 수동 IP 할당 설정에 등록이 됩니다.



3. NAT/라우터관리 - 포트 포워드 설정에서 외부 접속 포트를 서버 컴퓨터의 포트로 연결시킵니다.

http는 기본 80번이고 ftp는 기본 21번 포트를 사용합니다. 하지만 인터넷 서비스 업체에서 서버용 포트를 막아놓는 경우가 있습니다.

이런 경우에 웹서버(http)를 예로 들자면 다른 포트를 80번 포트로 연결시키면 됩니다. 8000번 혹은 8080번 같은 포트를 서버 컴퓨터의 80번으로 연결 시키면 웹서버에 연결이 됩니다.



4. 일반 가정에서는 비싼 고정IP가 아닌 유동IP를 사용하게 됩니다. 이런 경우 매번 IP가 변경되어 서버 접속시 많은 불편함이 있겠지요.

iptime에서 도메인 서비스를 제공하고 있는데 이것이 DDNS입니다.

호스트 이름에서는 외부에서 접속시 사용할 도메인네임을 입력하시는데 iptime.org는 반드시 붙여야 합니다.

캡쳐된 화면에서는 scdc라는 호스트 네임을 사용하기에 scdc.iptime.org를 사용하였습니다.

사용자 계정에는 개인 email주소를 치시고 암호는 DDNS 관리에 사용할 암호를 입력하시면 됩니다.



5. 생각하지 못한 복병입니다. 저도 방화벽을 생각 못하는 바람에 계속 헤맸었습니다.

내컴퓨터 - 설정 - 제어판 - 보안센터를 클릭합니다.

보안센터 화면에서 Windows 방화벽을 클릭합니다.



6. 서버 포트를 예외로 지정해야만 외부에서 접근이 가능합니다.

포트추가 버튼을 클릭합니다.



7. 웹서버를 예로 들었을때 이름은 아무거나 상관없습니다.www으로 하든 web로 하든.

포트 번호는 웹서버에서 설정된 포트 번호(80)을 사용합니다.

임의로 변경하신 경우에는 변경된 포트 번호를 예외로 지정하시면 됩니다.




8. 모든 설정이 끝났습니다.

브라우져에서 scdc.iptime.org를 치니 제 서버 페이지가 보이는 군요..

Posted by 다오나무