AES 256 암호화를 위한 WinCrypt 사용하기

MSDN에서 참고하자니… 너무나도 설명이 장황하고 API 사용에 핵심이되는걸 찾지못하여 example을 구글링하여 여차저차 짜집기하였다. 그중 가장 많은 도움이된 글은 이글이글.

만약 Crypt관련함수들 링크실패하면 헤더나 소스코드에 #pragma comment(lib, "advapi32")를 넣으면된다.

아래는 최소한의 헤더파일

#define WIN32_LEAN_AND_MEAN
#include <Windows.h>
#include <wincrypt.h>

AES 암호화에서 안정성이 보장되는 AES 256을 기준으로 설명한다. 그 하위 AES 암호화는 KEY의 길이가 다르기때문에 필요하다면 32비트 KEY 대신 16비트 키를 사용하면… 될것이다. 나머지는 알고있기로는 동일.

필요한 변수는 아래와같다.

HCRYPTPROV hCryptProv;
HCRYPTHASH hHash;
HCRYPTKEY hKey;

첫번째로 Provider를 얻어야한다.

if (CryptAcquireContext(&hCryptProv, NULL, MS_ENH_RSA_AES_PROV, PROV_RSA_AES, 0) == FALSE) {
    return FALSE;
}

핸들을 해제하는 코드는 아래와같다. 이 핸들은 지속적으로 사용하게된다. 완전하게 사용이 끝났으면 그때 Release 해주면된다. Continue reading AES 256 암호화를 위한 WinCrypt 사용하기

닷넷 Any CPU 빌드한 바이너리가 64비트 OS에서 32비트로 동작할 때

닷넷으로 Text to Speech. 즉 입력 된 텍스트를 읽어주는 TTS를 해달라는 부탁으로 시작하게 된 삽질.

내가 사용하는 OS는 윈도 10이고 타겟은 윈도 7이였다. 윈도 TTS는 https://msdn.microsoft.com/en-us/library/hh361572(v=office.14).aspx 이곳에서 Runtime, Language Packs 두가지를 설치하면 된다고 되어있는데… 이상하게 아무리 재설치를해도 한글 음성이 지원되는 Voice 객체가 나타나지않았다.

윈도 제어판에서는 한글 음성이 나타나는데 닷넷에선 아무리 해도 나타나지않아 포기하고 C++로 Voice 객체를 조회해보았지만 역시나 실패. 혹시나해서 64비트로 빌드하여 다시 조회하니 Heami가 나타나는 것이였다.

그런것이였다. 윈 10은 32비트, 64비트 둘 다 한글 Voice가 재공되는 것이였다… 근데?! 뭐지? 싶어 닷넷 실행파일 띄워놓고 작업관리자 열어보니 32비트로 실행되고있고, 구글링해보니 http://stackoverflow.com/a/23351613 이 댓글이 나왔고, 프로젝트 속성을 보니 아래 옵션이 있었다.

2016-10-16-1

32비트 기본 사용…!!! 32비트 기본이라니! 하.하!? VS2015에서 기본으로 체크되는 옵션인지 어떤지는 모르겠지만 회사에서 VS2015가 나오자마자 구입하였는데… 왠지 최근 만든 닷넷 어플들 32비트 모드로 동작하고있을거같다.

아마도 ActiveX라던지 COM Object, 기타 외부 네이티브 라이브러리가 32비트가 대다수라 생기는 문제가 많기때문에 이런걸 기본옵션으로 체크되어있는거같은데… 나같은 경우엔 그 반대라서 하루 삽질을 하였다.

아… 해결되어서 좋긴한데 왜 눈물이 나려하지… 내 시간은..

Continue reading 닷넷 Any CPU 빌드한 바이너리가 64비트 OS에서 32비트로 동작할 때

최근 NVENC로하고있는 삽질

팀뷰어나 VNC로는 클라이언트에서 하드웨어 가속을 사용하지 못해서인지 모바일에서나 노트북에서나 발열이 좀 많다는게 단점. 특히나 게임은 화면 업데이트 빈도가 높아서인지 팀뷰어가 최적화 잘되어있지만 그래도 사용할 수 있는 대역폭에 비하면 화질이 좋지 못하였다.

아이폰이 GIF를 지원하지않는건 GIF는 하드웨어가속을 사용할 수 없기때문이라는데, 왠지 원격을 H.264로 스트리밍하고 제어한다면 노트북에서도 낮은 프로세서 사용률로 실시간으로 게임도 스트리밍하여 컨트롤 할 수 있지 않을까싶어 거진 2주간 NVENC와 XDGI 삽질을 하였다. DirectX 인터페이스나 미디어 스팩이나 아무것도 모르고 시작해서 지금도 아는게 없는상태에서 그냥 무작정 해보아서 이제야 막 결과가 눈에 들어오는 수준 orz

일단 결과는 간략하게 아래와같다.

%ec%ba%a1%ec%b2%98

인코딩 & 스트리밍 프로그램은 보여지는 화면이 없고 아직 MPEG4의 정상적인 스트리밍 방법을 모르기에 그냥 데이터만 있어도 재생이 되는 ffplay로 인코딩 된 raw 데이터를 바로 뿌려보았다. (파일로 출력하고 ffplay에서 읽도록 하면 거의 0.5초 정도 수준으로 지연이 있지만 tcp로 전송하니 버퍼링이 있어서인지 1초 넘게 지연이 생겨버린다.) 정상적으로 게임 화면이 나타나긴하지만 코딩하며 실행하면서 그래픽 메모리를 잘못 건든것이 있는지 종종 아래처럼 처참하게 깨지는 화면이 나타난다는건 덤.

2016-10-01

도중에 AAC 가속도 재공되는 인텔의 Media Codec을 사용해보려했지만 그건 나중으로 미루고 일단 NVENC를 사용하여 스트리밍하는것 부터 완벽하다 싶으면 건들어봐야겠다. 과연 완성이나 되련지 모르겠지만 완성되면 코드를 공개하던지 해봐야겠다. 아마도 ffmpeg 라이브러리를 사용해서 인코딩 하고 스트리밍 활용하는 방향으로 전환될수도 있지만 그건 나중 문제(…)

아래 화면은 그래픽카드의 비디오 엔진 점유율과 스트리밍 CPU 점유율이다. Continue reading 최근 NVENC로하고있는 삽질

Windows 10에 다시 추가된 Aero Glass 효과

약 1년 전 윈도우즈 블로그에 아래와 같은 글 하나가 등록되어있었다.

We’ve also heard loud in clear that many Windows Insiders want to see Aero Glass from Windows 7 make a comeback. We’ve been working out how to satisfy this request, and are trying some things out with this build to see how you like them. We’re running a little A/B test with this build. 50% of you will normal transparency on the Start menu and taskbar while the other 50% will see a blur effect on the Start menu and taskbar (like frosted glass). If Windows Insiders really like the blur effect, we will add it to more areas and even consider making it the default instead of standard transparency. Which one did you get? Send us feedback about it via the Windows Feedback app!

원문 글: https://blogs.windows.com/windowsexperience/2015/04/29/new-windows-10-insider-preview-build-10074-now-available/

어쩐지 어느 순간부터 단순 반투명이 아닌 시작 메뉴의 배경에 번짐효과가 은근슬적 적용되었다 싶었다.
windows 10 aero glass

무려 1년이 지난 지금도 MSDN에는 이러한 효과를 사용하기위한 내용은 없다. 컴백이라더니 왜 공개 안하는지는 모르겠는데… 그냥 예상되는거라면 너도나도 남용할거같아서? 그래도 능력자들이 리버스 엔지니어링을했는지 이것의 적용법을 WPF, Delphi XE버전으로 남겨진 글이 있다.

WPF: http://withinrafael.com/adding-the-aero-glass-blur-to-your-windows-10-apps/
Delphi: http://stackoverflow.com/questions/32724187/how-do-you-set-the-glass-blend-colour-on-windows-10

문제는 이게 C로 정의된걸 꼬박 하루동안 찾지못해 엉뚱한 삽질을 했다는거… 역시나 중국은 무섭게도 C언어로 함수 원형과 구조체들을 정리한것이 나왔다. (Microsoft에서 공개한 문서도 없는데 저런걸 어떻게 다 찾아내서 이름까지도 정하는건지 신기하다.)

C: https://git.oschina.net/ysc3839/codes/djcx0y3b9a5pmtrzgq6ki (여담이지만 코멘트로 달려있는 소스의 마지막 라인에 FreeLibrary(hUser); 한줄이 더 추가되어야 맞을것이다.)

처음엔 WPF 버전의 코드를 보고 C로 옮겼지만 왜인지 되어야하는데 안된다 싶었다. 저 코드를 찾기 전만해도 계속 #pragma pack(push, 1), #pragma pack(pop)을 쓰고있었고, 해당 구조체는 이러한 packing이 필요 없던것이였다(…). OS 레벨의 구조체는 packing이 일반적이라 당연히 필요한 줄 알았건만 이것이 하루 삽질하게 만들고, 그나마 다행인건 좀 더 완전하게 정의 된 C버전의 코드를 찾았다는 정도다.

암튼 현재 만들고있는 프로그램에서 정의하여 사용하는 구조체와 함수 원형은 아래와같다. Continue reading Windows 10에 다시 추가된 Aero Glass 효과