#include "stdio.h" #include "BSCrypto.h" #include "BSUtil.h" #include "wchar.h" void printBlockOfLength(BYTE* b, int len) { int i; for (i = 0; i < len; i++, b++) { printf("%02x", *b); } printf("\n\n"); } int wmain(int argc, WCHAR *argv[]) { printf("%s\n\n", BSCrypto_GetVersion()); if (BSCrypto_SelfTest() != BS_SUCCESS) { printf("자가시험에 실패했습니다.. 환경을 확인 후 관리자에게 문의해주세요.\n"); return 0; } if (argc < 4) { printf("명령어가 잘못 되었습니다.\n"); printf("ex) BSCryptoText.exe -k 1111 \"원본 파일\" \"암호화 후 저장될 파일\"\n"); printf("ex) BSCryptoText.exe -k 1111 -d \"암호화된 파일\" \"복호화 후 저장될 파일\"\n"); return 0; } else if (argc > 6) { printf("명령어 인자가 너무 많습니다.\n"); return 0; } char sKey[256] = { 0, }; if (wcscmp(argv[1], L"-k") == 0) { sprintf_s(sKey, "%ws", argv[2]); } else { printf("암/복호화 키를 입력해주세요.\n"); return 0; } if (wcscmp(argv[3], L"-d") != 0) { // 암호화 WCHAR* sOrgPath = argv[3]; WCHAR* sEncPath = argv[4]; if (BSCrypto_IsEncFile(sOrgPath) == BS_SUCCESS) { printf("이미 암호화된 파일입니다.\n"); return 0; } switch (BSCrypto_EncFile(sKey, sOrgPath, sEncPath)) { case BS_SUCCESS : // 암호화 무결성 체크 BYTE pHash1[SHA256_BLOCK_SIZE]; BYTE pHash2[SHA256_BLOCK_SIZE]; if (BSCrypto_FileToSha256(sOrgPath, pHash1) == BS_SUCCESS) { // 원본 해시를 구해서 printf("원본파일 해시 : "); printBlockOfLength(pHash1, SHA256_BLOCK_SIZE); // 블록 암호화 시 사용된 데이터 해시를 비교한다. if (BSCrypto_GetOrgFileHash(sEncPath, pHash2) == BS_SUCCESS) { printf("암호화 적용전 해시 : "); printBlockOfLength(pHash2, SHA256_BLOCK_SIZE); if (memcmp(pHash1, pHash2, SHA256_BLOCK_SIZE) == 0) { printf("암호화 성공\n"); } } } return 0; case BS_ERROR_OPEN_FILE : printf("파일을 열수 없습니다.\n"); return 0; default : printf("알수없는 오류.\n"); return 0; } } else { // 복호화 WCHAR* sEncPath = argv[4]; WCHAR* sDecPath = argv[5]; if (BSCrypto_IsEncFile(sEncPath) != BS_SUCCESS) { printf("암호화된 파일이 아닙니다.\n"); return 0; } switch (BSCrypto_DecFile(sKey, sEncPath, sDecPath)) { case BS_SUCCESS : printf("복호화 성공\n"); return 0; case BS_ERROR_OPEN_FILE : printf("파일을 열수 없습니다.\n"); return 0; case BS_ERROR_INVALID_ENC_FILE : printf("잘못된 암호 파일입니다.\n"); return 0; case BS_ERROR_CREATE_FILE : printf("복호화 파일을 생성할 수 없습니다.\n"); return 0; case BS_ERROR_DECRYPT_FILE : printf("무결성 검증 실패. 복호화키가 잘못되었을 수 있습니다.\n"); return 0; default: printf("알수없는 오류.\n"); return 0; } } }