웹메소드 중 Get방식과 Post방식

Programming/Security | 2011. 12. 4. 03:28
Posted by 신이내린프로그래머

Get 방식 = 주소창을 이용해서 정보를 전달

-  모든 파라미터는 URL을 통해 전달된다.
- 사용자의 눈에 직접적으로 표시되기 때문에, 로그인 비밀번호등의 정보를 Get방식으로 전달하면 문제가 발생할 가능성이 있다.
- URL의 길이가 정해져 있기 때문에 많은 양의 정보를 전달할 수 없다.
- URL 형식에 맞지 않는 파라미터 이름, 값은 ENCODING해서 전달해야 한다. 그렇지 않은 경우 전달하고자 하는 정보와 다른 정보가 전달될 수 있다.



Post방식 = HTTP헤더 안에 넣어 정보를 전달

- 전달하고자 하는 정보가 HTTP Body 에 포함되어 전달된다.
- HTTP Body 에 포함되므로, 웹브라우저 사용자의 눈에 직접적으로 표시되지 않는다.
- Body에 포함되어 전달되므로, 길이에 제한이 없다. 

'Programming > Security' 카테고리의 다른 글

IDS, IPS, 방화벽, 웹방화벽 구분  (0) 2011.12.04
버퍼 오버플로우  (0) 2011.12.04
FTP의 Active Mode 와 Passive Mode  (0) 2011.12.04
DES  (0) 2011.11.29
윈도우에서 제공하는 간단한 방식의 암복호화 소스  (0) 2011.11.26
 

FTP의 Active Mode 와 Passive Mode

Programming/Security | 2011. 12. 4. 03:05
Posted by 신이내린프로그래머

<Active Mode>


특징

Command Port는 클라이언트가 서버로 접속하고, Data Port는 서버가 클라이언트로 접속

 

동작 순서

 

  1. 클라이언트에서 서버의 21번 포트(Command Port)로 접속 후,
    클라이언트가 자신의 포트 번호(1023 보다 큼)보다 1 값이 큰 포트 번호를 서버에 알려줌

  2. 서버에서는 ack 로 응답

  3. 서버의 20번 포트(Data Port)에서 클라이언트가 알려준 포트로 접속

  4. 클라이언트가 ack 로 응답

 

기타

서버가 방화벽 안에 있다면 방화벽 설정에 아래의 port 가 허용 되어야 한다.
  - port 21 Inbound (Command Port) 사용 허용
  - port 20 Outbound (Data Port) 사용 허용

클라이언트가 방화벽 안에 있을 경우, 서버에서 클라이언트로의 접속이 차단될 수 있다.

 

 

<Passive Mode>


특징

Command Port 와 Data Port 모두 클라이언트가 서버로 접속

 

동작 순서

  1. 클라이언트가 서버의 21번 포트(Command Port)로 접속

  2. 서버는 서버에서 사용할 Data Port 를 클라이언트에게 응답으로 알려줌

  3. 클라이언트는 다른 포트를 열어 서버가 알려준 Data Port 로 접속

  4. 서버가 ack 로 응답

 

기타

서버가 방화벽 안에 존재한다면,
서버에서 사용할 수 있는 Data Port(1024 ~ 65535 또는 FTP 서버에서 설정한 포트 범위) 를 
방화벽에서 허용해야 함

'Programming > Security' 카테고리의 다른 글

버퍼 오버플로우  (0) 2011.12.04
웹메소드 중 Get방식과 Post방식  (0) 2011.12.04
DES  (0) 2011.11.29
윈도우에서 제공하는 간단한 방식의 암복호화 소스  (0) 2011.11.26
오픈소스 API  (0) 2011.11.26
 

영상처리

Programming/Image Processing | 2011. 11. 30. 04:27
Posted by 신이내린프로그래머
// 8x8 DCT를 수행하는 함수 
void DCT(int nBlockSize, // DCT를 수행할 block의 size 
int nWidth, int nHeight, // 수행할 영상의 가로,세로 크기 
double* pInput, // double형 입력영상 
double* pOutput){ // double형 출력영상 
int row_index, col_index; // 가로,세로 index 
int m, n, x, y; // Block DCT에 사용될 index 변수 
double result; // 연산 결과값을 임시로 저장할 변수 
double Cu, Cv; // DCT 계수값을 저장하는 변수 
printf(" [%d x %d DCT START] \n",nBlockSize, nBlockSize); 
for (row_index = 0; row_index < nWidth/nBlockSize; row_index++){ // 영상의 가로를 따라 연산 수행 (한번에 BlockSize만큼 건너뛰면서 이동) 
for(col_index = 0; col_index < nHeight/nBlockSize; col_index++){ // 영상의 세로를 따라 연산 수행 (한번에 BlockSize만큼 건너뛰면서 이동) 
for(m = 0; m < nBlockSize; m++){
for(n = 0; n < nBlockSize; n++){
result = 0.0; // 매번 연산 후 결과값 초기화 
for(x = 0; x < nBlockSize; x++){ 
for(y = 0; y < nBlockSize; y++){ 
result += (double)cos((((2*(double)x+1)*(double)m*PI)/(nBlockSize*2)))
*cos((((2*(double)y+1)*(double)n*PI)/(nBlockSize*2)))*pInput[((row_index*nBlockSize)+x)+((col_index*nBlockSize)+y)*nWidth]; 
} // m, n에 따른 계수값 결정 
if(m==0) Cu = 1.0/sqrt(2.0); 
else Cu = 1.0; 
if(n==0) Cv = 1.0/sqrt(2.0); 
else Cv = 1.0; 
pOutput[(row_index*nBlockSize+m)+(col_index*nBlockSize+n)*nWidth] = 
result*((Cu*sqrt((double)2.0/nBlockSize)*Cv*sqrt((double)2.0/nBlockSize))); 
printf(" [%d x %d DCT Complete] \n",nBlockSize, nBlockSize); 
return; 
}

// 양자화 행렬을 이용한 양자화 함수 
void Quantization(int nBlockSize, int nWidth, int nHeight, double* pInput, double* pOutput){ 
double dTemp = 0.0; // 임시로 결과값을 저장할 변수 선언 
printf("[Quantization Processing Start]\n"); 
for ( int row_index = 0; row_index < nWidth; row_index += nBlockSize){ 
for (int col_index = 0; col_index < nHeight; col_index += nBlockSize){ // 가로, 세로 모두 BlockSize 만큼 이동 
dTemp = 0.0; // 결과를 임시로 저장할 변수 초기화 
// 각 Block의 값을 양자화 배열의값으로 나누어 양자화 실행 
for (int x = 0; x < nBlockSize; x++){ 
for (int y = 0; y < nBlockSize; y++){ // 계산 결과값을 임시 변수에 저장 
dTemp = (pInput[(row_index+x)+(col_index+y)*nWidth]/Q_Matrix[x+y*nBlockSize]); // 임시 변수를 출력배열에 저장 
pOutput[(row_index+x)+(col_index+y)*nWidth] = dTemp; 
printf("[Quantization Complete]\n"); 
return; 

// 양자화 행렬을 이용한 역양자화 함수 
void InverseQuantization (int nBlockSize, int nWidth, int nHeight, double* pInput, double* pOutput){ 
double dTemp = 0.0; // 임시로 결과값을 저장할 변수 선언 
printf("[Inverse Quantization Processing start]\n"); 
for(int row_index = 0; row_index < nWidth; row_index += nBlockSize){ 
for(int col_index = 0; col_index < nHeight; col_index += nBlockSize){ // 각 Block별로 실행 
dTemp = 0.0; // 임시 결과값 초기화 
for(int x = 0; x < nBlockSize; x++){ 
for(int y = 0; y < nBlockSize; y++ ){ // 각 Block내의 값을 해당하는 양자화 값을 곱하여 역양자화 진행 
dTemp = pInput[(row_index+x)+(col_index+y)*nWidth]*Q_Matrix[x+y*nBlockSize]; 
pOutput[(row_index+x)+(col_index+y)*nWidth] = dTemp; 
printf("[Inverse Quantization Complete]\n"); 
return; 

// 8x8 Inverse DCT 수행하는 함수 
void IDCT (int nBlockSize, // Block Size 
int nWidth, int nHeight, // 가로,세로 크기 
double* pInput, double* pOutput){ 
double Cu, Cv; // 계수값 선언 
double result; // 결과값 선언 
printf(" [ %d x %d IDCT START ]\n", nBlockSize, nBlockSize); 
for (int row_index = 0; row_index < nWidth/nBlockSize; row_index++){ 
for(int col_index = 0; col_index < nHeight/nBlockSize; col_index++){ 
for(int m = 0; m < nBlockSize; m++){ 
for(int n = 0; n < nBlockSize; n++){ 
result = 0.0; // 결과값 초기화 
for(int x = 0; x < nBlockSize; x++){ 
for(int y = 0; y < nBlockSize; y++){ // x, y에 따른 계수값 결정 
if(x==0) Cu = 1.0/sqrt(2.0); 
else Cu = 1.0; 
if(y==0) Cv = 1.0/sqrt(2.0); 
else Cv = 1.0; // Block별 결과값 계산 
result += ((Cu*Cv))*cos((((2*(double)m+1)*(double)x*PI)/(nBlockSize*2.0)))*cos((((2*(double)n+1)*(double)y*PI )
/(nBlockSize*2.0)))*pInput[(row_index*nBlockSize+x)+(col_index*nBlockSize+y)*nWidth]*sqrt(2.0/nBlockSize)*sqrt(2.0/nBlockSize); 
} // 계산된 결과를 출력 배열에 저장 
pOutput[(row_index*nBlockSize+m)+(col_index*nBlockSize+n)*nWidth]=result; 
printf(" [ %d x %d IDCT Complete ] \n", nBlockSize, nBlockSize); 
return; 
}

'Programming > Image Processing' 카테고리의 다른 글

JPEG에 사용된 압축 알고리즘  (0) 2011.11.27
레이저마우스  (0) 2011.11.26
 

블로그 이미지

신이내린프로그래머

카테고리

Category (22)
Programming (19)
... (1)