프로그래밍
-
[C#, OpenCL] OpenCL로 SHA1 연산하기프로그래밍/C# + Unity 2023. 5. 30. 08:30
C#에서 OpenCL을 사용하고자 할 때, 여러 방법이 있지만 보통 Nuget Package에서 Cloo를 추가하여 사용한다. 1. kernelSource 작성 본격적으로 OpenCL을 사용하기 이전에, 아래와 같이 kernelSource를 작성해야한다. 마땅히 참고할 소스코드가 없어, https://en.wikipedia.org/wiki/SHA-1 의 pseudocode를 참조하여 구현하였다. __kernel void sha1(__global const unsigned char* data, int length, __global uint* digest) { int num_blocks = length / 512; uint h0 = 0x67452301; uint h1 = 0xEFCDAB89; uint h2 ..
-
[C#, webhacking.kr] Challenge 4번 풀기프로그래밍/C# + Unity 2023. 5. 18. 16:11
일반적인 webhacking.kr의 문제는 preg_match 회피 및 sql injection이 주를 이루지만 challege 4는 양상이 다르다. 아래는 challenge 4의 소스코드 중 일부이다. 해석하자면 10000000부터 99999999 사이의 랜덤한 숫자 하나를 골라 salt_for_you라는 단어를 salt로 사용하여 뒷 부분에 합친다. 이후, 해당 값을 chall4라는 이름의 세션에 담고 500번 sha1 해싱을 진행한다. 결론적으로, 문제를 해결하려면 출력된 hash 값을 보고 원래의 문자열을 알아 맞춰야하는 역해싱 문제이다. 해결하는 방법은 여러가지가 있겠지만 귀찮아서 10000000부터 20000000 사이의 값만 생성 후 비교하고 없으면 새로고침을 반복하는 방법으로 해결하려고 아..
-
[C#] FloodFill 알고리즘과 땅따먹기프로그래밍/C# + Unity 2023. 4. 1. 15:06
기본적으로 땅따먹기는 paper.io와 같이 넓은 땅 위에 자신의 시작 지점을 정하고 말을 움직이며 선을 그려 다시 본인의 선에 닿으면 해당 부분 만큼 본인의 땅이 되는 게임이다. 땅따먹기가 사각형만 되었어도, 구현에 어려움을 느끼지 않겠지만 아래와 같이 그려지기 시작하면 내부를 어떻게 채워야 할까 머리가 아파진다. 이럴 때 사용하는 알고리즘이 FloodFill이다. 보통 재귀나, 큐, 스택을 사용하여 구현한다. 하지만, 재귀를 사용하면 쉽게 StackOverflow가 발생해서 일반적으로 큐나 스택을 사용한다. 1. 재귀를 이용한 방법 // isVaild 함수는 해당 point의 좌표가 올바른 위치에 있는지, 벽은 아닌지, // 이미 색칠한 것은 아닌지 확인하는 함수이다. // 9는 색칠한 좌표이다. p..
-
Apache MINA와 Netty의 차이 및 장단점프로그래밍/Java 2023. 3. 5. 18:04
Apache MINA와 Netty MINA와 Netty는 모두 네트워크 프로그래밍에 사용되는 Java 기반의 NIO(Non-blocking I/O) 프레임워크이다. 이 두 프레임워크 모두 비동기 I/O를 지원하며, 이를 통해 동시에 많은 클라이언트 요청을 처리할 수 있다. 그러나 MINA와 Netty는 아래와 같은 차이점이 있다. 성능 Netty는 성능면에서 MINA보다 더 높은 성능을 보인다. MINA는 Reactor 스타일의 구현을 사용하여 I/O를 처리하는 반면, Netty는 비동기 I/O 작업 처리를 위해 I/O worker 쓰레드풀을 사용한다. 코드 디자인 MINA는 이벤트 기반의 모델을 사용한 반면, Netty는 Future와 Callback 구현을 사용한다. 개발자 커뮤니티 Netty는 큰 ..
-
[PHP, Nginx] 사용자 정의 헤더 넘겨 받기프로그래밍/Web(CSS + HTML + JS + PHP ) 2023. 2. 23. 13:57
문제 상황 Apache였다면, apache_request_headers() 함수를 사용하여 헤더들을 넘겨 받아서 사용하겠지만 Nginx에서는 해당 함수를 사용할 수 없기 때문에 사용 방법이 조금 다르다. 문제 해결 결론 부터 말하자면, $_SERVER를 이용해서 넘겨 받을 수 있다. 아래와 같이 사용자 정의 헤더(CURL-REAL-IP)를 전송하려고 한다. ※ 헤더는 -만 사용해야하고 불가피하게 _을 사용하려고 하면 underscores_in_headers on; 옵션을 추가해줘야한다. Nginx를 통과하여 php에 도착하면 $_SERVER에 HTTP_라는 접두사가 붙은채로 아래와 같이 도착해있다. 소스 코드 서버단 php에서 사용할 때는 다음과 같이 사용한다.
-
[PHP] cURL 사용해서 post 데이터 넘겨주기프로그래밍/Web(CSS + HTML + JS + PHP ) 2023. 2. 20. 12:37
소스 코드 $clientID = "Client ID"; $clientSecret = "Client SecretKey"; $url = "https://www.example.com"; $body = array("foo" => "test", "bar" => "test"); # type1 $body = "foo=test&bar=test"; # type2 $ch = curl_init(); //curl 초기화 curl_setopt_array($ch, array( CURLOPT_URL=> $url, //URL 지정하기 CURLOPT_POST=> true, //true시 post 전송 CURLOPT_RETURNTRANSFER=> true, //요청 결과를 문자열로 반환 CURLOPT_HTTPHEADER=> array(..
-
[Crawling] 스타벅스 매장 위치 데이터 크롤링하기프로그래밍/Python 2023. 1. 26. 17:12
Python으로 크롤링 하는 법 파이썬으로 크롤링하는 방법은 크게 selenium을 쓰는 방법과 requests를 사용해서 하는 방법으로 나뉜다. 평상시에 윈도우가 아닌 환경에서 Jupyter를 사용하고 requests를 사용하여 크롤링하는 것이 속도 측면에서 더 나아서 크롤링할 때는 requests를 사용한다. 검색해보면 BeautifulSoup와 selenium을 사용하여 크롤링하는 방법 위주로 설명된 블로그들이 많아, requests를 이용해서 스타벅스의 매장 위치를 크롤링 하는 방법을 소개하고자 한다. 소스 코드 import math import random import requests import pandas as pd 스타벅스 홈페이지에서 매장을 불러오는 구조를 보면 randomString을 ..
-
[Pandas] matplotlib 한글 폰트 설치하기프로그래밍/Python 2023. 1. 26. 16:22
https://syudal.tistory.com/entry/Jupyter-pandas-matplotlib-한글-폰트-설치하기 [Jupyter] pandas matplotlib 한글 폰트 설치하기 pandas를 통해 한글이 포함된 csv를 불러오는 방법은 아래와 같다. import pandas as pd df = pd.read_csv('./data.csv', sep=',', encoding='utf-8') df.head() 인코딩의 문제가 없으므로, 해당 파일의 머리 부분을 잘 불러 syudal.tistory.com 이전에 위와 같이 포스팅 했던 것을 보면 pandas에 matplotlib 한글 폰트 설치하는 방법은 다음과 같다. sudo apt-get install fonts-nanum* 하지만 Jupy..