BSOne.SFC/Tocsg.Module/BSCrypto/EXE_BSCryptoTest/BSCryptoTest.cpp

132 lines
2.9 KiB
C++

#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;
}
}
}