프로그래밍
-
암호화 라이브러리 간 차이 때문에 암호화 결과가 달랐던 경우프로그래밍/의문 2018. 11. 12. 22:52
현상openssl과 닌텐도 crypto 라이브러리의 aes128 cbc로 암호화한 결과가 달랐다 원인openssl과 닌텐도 crypto와의 차이였다.openssl은 EVP_EncryptFinal 함수에서 pkcs#7 패딩을 자동으로 삽입해줬으나,닌텐도의 crypto 라이브러리는 패딩을 삽입해주지 않았다. 해결 닌텐도의 crypto 라이브러리로 암호문을 만들 때, 버퍼의 빈 공간에 pkcs#7 패딩을 직접 만들어주니 암호화 결과가 같았다. 참고http://manual-archive.blogspot.com/2012/03/pkcs-padding-method_19.htmlhttps://crypto.stackexchange.com/questions/10522/openssl-paddinghttps://wiki.op..
-
error_code 정의 참고 코드 조각프로그래밍/코드 조각 2018. 10. 28. 00:59
enum class VerificationErrc{ //Algorithms provided does not match with header InvalidAlgorithm = 1, //Token is expired at the time of decoding TokenExpired, //The issuer specified does not match with payload InvalidIssuer, //The subject specified does not match with payload InvalidSubject, //The field IAT is not present or is of invalid type InvalidIAT, //Checks for the existence of JTI //if val..
-
c++에서의 패킷 핸들러 바인딩프로그래밍/코드 조각 2018. 10. 21. 23:43
#include #include #include using namespace std; namespace packet{ enum class Type : unsigned short { None = 0, Login = 1, Logout = 2, }; struct Header { std::uint16_t size; Type type; }; struct Login { char id[20]; std::uint8_t len; };} std::map handlers; template void bind(packet::Type type, void(*handler)(int, const PayloadType&)){ handlers[type] = [handler](int network..
-
::operator new, ::operator delete프로그래밍/c++ 2018. 10. 3. 15:25
c++에서 생성자 호출 없는 new를 찾다가 알게되었다.(c의 malloc과 같은 기능이지만)::operator new, ::operator delete는 c의 malloc과 free 처럼 사용할 수 있다. #include struct foo{ foo(){} ~foo(){}}; int main(){ foo* p = static_cast(::operator new(sizeof foo)); // 메모리 할당 new (p)foo(); // replacement new p->~foo(); // 소멸자 호출 ::operator delete(p); // 메모리 해제 return 0;}
-
c++ 클래스 상속 관계에서의 메모리 정렬프로그래밍/c++ 2018. 9. 16. 20:27
https://stackoverflow.com/questions/2006504/c-data-alignment-member-order-inheritance 0. 상속 관계일 때 베이스 클래스의 멤버 변수의 메모리 위치class base { int i; }; class derived : public base // same for private inheritance { int k; };일 때int i; // baseint k; // derived 순서로 정렬 됨 1. 거의 모든 컴파일러는 클래스의 나머지 멤버 앞에 가상 테이블 포인터를 배치합니다. 즉, vftable 포인터와 클래스 멤버 사이에 약간의 패딩이있을 수 있습니다.
-
클라이언트에서 특정 언어권 문자열이 깨져서 보였던 이슈프로그래밍/의문 2018. 9. 5. 15:01
각 언어권 별 텍스트 리소스를 만들어주는 툴을 몇 달 전에 만들었었고, 정상적으로 리소스가 뽑혀져 나오는지 확인했으며 문제가 없는 걸(없는 것처럼 보이는 걸) 확인했었다.그 뒤 한동안 잊고 살았다. 그리고, 본격적으로 관련 작업이 시작되는지 오늘에서야 그 툴을 사용할 일이 생겼다. 곧바로 문제가 발생했다. 일본어 텍스트에서 발생했는데 클라이언트에서 글자가 깨져 보이는 것이다. 0. 소스를 열어 인코딩이 시스템 디폴트로 되어있는 건 아닐지 확인했으나 utf8로 지정이 되어있었다. 문제가 아니었다.1. utf8 BOM 문제인가 했지만 클라이언트 내에서 utf8 bom을 체크하는 코드가 있어서 해당 문제도 아니었다.2. 예전에 얼핏 들었던 코드 페이지 라는 것과 관계가 있던 거 아닐지 찾아봤다 코드 페이지에 ..