티스토리 뷰
#include "stdafx.h" #include <Windows.h> #include <atlstr.h> #define MAX_PASS 32 #define MY_PASS "HAHAHA" #pragma warning( disable: 4996 ) int DeCode(char *pszCode); int EnCode(char *pszCode); int main() { char szWork[MAX_PASS] = "BABO BABO BABO"; EnCode(szWork); CString strWork; printf("Encoded : %s\n", szWork); //ZeroMemory(szWork, strlen(szWork)); DeCode(szWork); printf("Decoded : %s\n", szWork); return 0; } // 암호화 int EnCode(char *pszCode) { HCRYPTPROV hProv; HCRYPTHASH hHash; HCRYPTKEY hKey; BYTE pbCode[MAX_PASS]; DWORD dwDataLen; ZeroMemory(pbCode, MAX_PASS); sprintf((char*)pbCode, "%s", pszCode); dwDataLen = (DWORD)strlen((char*)pbCode) + 1; // CSP(Crystographic Service Provider) 핸들 얻기 if (CryptAcquireContext(&hProv, NULL, MS_ENHANCED_PROV, PROV_RSA_FULL, 0)) { // 해쉬 만들기 if (CryptCreateHash(hProv, CALG_SHA, 0, 0, &hHash)) { // 해쉬 값 계산 if (CryptHashData(hHash, (BYTE*)MY_PASS, (DWORD)strlen(MY_PASS), 0)) { // 키 만들기 if (CryptDeriveKey(hProv, CALG_RC4, hHash, CRYPT_EXPORTABLE, &hKey)) { // 암호화\tab if (CryptEncrypt(hKey, 0, TRUE, 0, pbCode, &dwDataLen, MAX_PASS)) { sprintf(pszCode, "%s", (char*)pbCode); } else { return 5; // 암호화 에러 } } else { return 4; // 키 만들기 에러 } } else { return 3; // 해쉬 값 계산 에러 } } else { return 2; // 해쉬 만들기 에러 } } else { // 유저용 키 컨테이너 만들기 if (!CryptAcquireContext(&hProv, NULL, MS_ENHANCED_PROV, PROV_RSA_FULL, CRYPT_NEWKEYSET)) { return 1; // 유저용 키 켄테이너 만들기 에러 } } // 해쉬 없애기 CryptDestroyHash(hHash); // CSP 핸들 풀어주기 CryptReleaseContext(hProv, 0); return 0; } // 복호화 int DeCode(char *pszCode) { HCRYPTPROV hProv; HCRYPTHASH hHash; HCRYPTKEY hKey; BYTE pbCode[MAX_PASS]; DWORD dwDataLen; ZeroMemory(pbCode, MAX_PASS); sprintf((char*)pbCode, "%s", pszCode); dwDataLen = (DWORD)strlen((char*)pbCode) + 1; // CSP(Crystographic Service Provider) 핸들 얻기 if (CryptAcquireContext(&hProv, NULL, MS_ENHANCED_PROV, PROV_RSA_FULL, 0)) { // 해쉬 만들기 if (CryptCreateHash(hProv, CALG_SHA, 0, 0, &hHash)) { // 해쉬 값 계산 if (CryptHashData(hHash, (BYTE*)MY_PASS, (DWORD)strlen(MY_PASS), 0)) { // 키 만들기 if (CryptDeriveKey(hProv, CALG_RC4, hHash, CRYPT_EXPORTABLE, &hKey)) { // 복호화 if (CryptDecrypt(hKey, 0, TRUE, 0, pbCode, &dwDataLen)){ sprintf(pszCode, "%s", (char*)pbCode); } else { return 6; // 복호화 에러 } } else { return 4; // 키 만들기 에러 } } else { return 3; // 해쉬 값 계산 에러 } } else { return 2; // 해쉬 만들기 에러 } } else { // 유저용 키 컨테이너 만들기 if (!CryptAcquireContext(&hProv, NULL, MS_ENHANCED_PROV, PROV_RSA_FULL, CRYPT_NEWKEYSET)) { return 1; // 유저용 키 켄테이너 만들기 에러 } } // 해쉬 없애기 CryptDestroyHash(hHash); // CSP 핸들 풀어주기 CryptReleaseContext(hProv, 0); return 0; }
http://wwwi.tistory.com/90 이 글에 있던 소스를 돌아가게 수정하였습니다.
'Programming > C++' 카테고리의 다른 글
c++ 클래스 생성자 (0) | 2018.05.30 |
---|---|
CURL visual studio include (0) | 2018.05.30 |
암호화 API 정리 (0) | 2018.05.24 |
class 초기화 (0) | 2018.05.21 |
C++ namespace (0) | 2017.04.21 |
- Total
- Today
- Yesterday
- vmware 오류
- Intel
- 백도어
- gdb intel
- rootkit
- 레거시 드라이버
- 드라이버
- 모듈
- gdb intel 변환
- GDB
- gdb 명령어
- gdb명령어
- module
- backdoor
- DriverEntry
- LKM
- 리눅스 모듈
- 루트킷
- VMware
- IRP
- 디바이스
- PNP 드라이버
- BP
- vmware cannot connect to the virtual machine
- 변환
- breakpoint
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |