'SHA256'에 해당되는 글 2건

  1. 2017.01.17 LEA로 파일 암호화 사용하기.
  2. 2017.01.15 SHA256-KISA 라이브러리 사용하기. 3

 LEA로 파일 암호화 사용한 것이 있었다.


 2016/04/01 - [분류 전체보기] - LEA 암호화 라이브러리 테스트


 여기서 사용한 것으로 LEA 암호화 라이브러리를 사용해서 파일을 암호화 해보았다.


 전에 사용하는 것에서 LEA에는 32Byte에서 설정되는 키가 설정이 되어 있고, IV에 관련되서도 설정이 제대로 되어 있지 않았다.


 이것을 해결하기 위해서 SHA-256을 사용할려고 한다.


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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
#include <stdio.h>
#include <stdlib.h>
 
#include <string>
 
#include "include\config.h"
#include "include\lea.h"
 
#include "KISA_SHA256.h"
 
 
unsigned char mk[32= { 0, };
 
unsigned int mk_len = 32;
 
char ctr_enc[16= { 0, };
 
unsigned char pyn_buffer[16= { 0, };
//unsigned int pyn_buffer_len = 16;
 
char cyp_buffer[16];
//unsigned int cyp_buffer_len = 16;
 
int main()
{
    size_t M = 0;
 
    SHA256_INFO sha256info;
 
    LEA_KEY key;
 
    FILE *fip = NULL;
    FILE *fop = NULL;
 
    //fip = fopen64("test", "rb");
    //fop = fopen64("test.LEA_CTR", "wb");
 
    fopen_s(&fip, "test""rb");
    fopen_s(&fop, "test.lea""wb");
 
    if (fip == NULL)
    {
        return -1;
    }
 
    if (fop == NULL)
    {
        return -1;
    }
    
    char password[256]="TestMessage";
 
    SHA256_Init(&sha256info);
    SHA256_Process(&sha256info, (unsigned char*)password, strlen(password));
 
    SHA256_Close(&sha256info, mk);
 
    lea_set_key(&key, mk, mk_len);
 
    M = fread(pyn_buffer, sizeof(char), sizeof(pyn_buffer), fip);
    lea_ecb_enc((unsigned char*)cyp_buffer, pyn_buffer, M, &key);
 
    if (fwrite(cyp_buffer, sizeof(char), M, fop) == 0)
    {
        fclose(fip);
        fclose(fop);
        _unlink("test.lea"); // 에러난 파일 지우고 종료
        return -1;
    }
 
    strcpy(ctr_enc, cyp_buffer);
 
    while ((M = fread(pyn_buffer, sizeof(char), sizeof(pyn_buffer), fip)) != NULL)
    {
        lea_ctr_enc((unsigned char*) cyp_buffer, pyn_buffer, M, (unsigned char*)ctr_enc, &key);
        //lea_ctr_dec(cyp_buffer, pyn_buffer,M,ctr_enc,&key);
        if (fwrite(cyp_buffer, sizeof(char), M, fop) == 0)
        {
            fclose(fip);
            fclose(fop);
            _unlink("test.lea"); // 에러난 파일 지우고 종료
            return -1;
        }
        //lea_ctr_enc(cyp_buffer, pyn_buffer, pyn_buffer_len, ctr_enc, &key);
        //fwrite(cyp_buffer, cyp_buffer_len, 1, fop);
    }
 
    fclose(fip);
    fclose(fop);
 
    return 0;
}
 
 
 
 
cs


 이렇게 앞부분 16Byte는 ECB모드를 사용하고, 나머지는 CTR모드를 이용해서 암호화 시킨다.

Posted by JunkMam
,

 암호에서 비밀번호를 사용할때, 해시함수를 사용한다.


 해시 함수는 단방향(일방적)인 암호방식을 사용할때, 혹은 암호문과 메세지의 변동이 있는지의 유무를 확인할 수 있다.


 보통은 비밀번호에 사용한다.(그리고 해시함수를 이용하면, 파일이 깨졌는지의 유무도 확인 할 수 있다.)


 해시란, 특정 덩어리를 특정 크기만큼으로 줄이는 방식을 뜻하는데. 압축이랑은 별개로 해당 값(해시 값)이 특정 덩어리를 뜻하긴 하지만, 해시 값으론 특정 덩어리를 알 수 없게 되어 있어서 압축과는 다르다.(압축은 압축한 대상이 특정 덩어리로 변환 될 수 있는 양방향성을 띈다.)


 여기서 유명한 SHA256을 사용할려고 한다.(필자는 SHA256을 이용해서 파일의 깨짐 유무를 확인할때 사용하기도 한다.)


 KISA에서 소스를 제공해주기도 한다.


 링크  : https://seed.kisa.or.kr/iwt/ko/bbs/EgovReferenceDetail.do?bbsId=BBSMSTR_000000000002&nttId=79


 외국에서는 C++로 객체화 해서 만들어져 있다.


 링크 : http://www.zedwood.com/article/cpp-sha256-function



소스


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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#include "KISA_SHA256.h"
 
#include <stdio.h>
#include <stdlib.h>
#include <tchar.h>
 
int main(int argc, char** argv)
{
 
    //변수 초기화.
    FILE *fp = NULL;
    unsigned char buffer[2048= { 0, };
    unsigned char result[32= { 0, };
    int read = 0;
    int loop_number = 0;
 
    //SHA256 변수 초기화.
    SHA256_INFO sha256_info;
 
    SHA256_Init(&sha256_info);
 
    //파일 읽기.
    //fp = fopen("Test.txt", "rb"); Visual Studio 옛버전을 사용할 경우. 이것을 사용할 것. Visual Studio에서 안전성 문제로 인한 함수 개선을 하였음.
    fopen_s(&fp, "Text.txt""rb");
 
    if (fp == NULL)
    {
        printf("Error : File not find.\n");
        system("pause");
        return -1;
    }
 
    while ((read = fread(buffer, 20481, fp)) != 0)
    {
        SHA256_Process(&sha256_info, buffer, read);
    }
 
    SHA256_Close(&sha256_info, result);
 
    for (loop_number = 0; loop_number < 32; loop_number++)
    {
        printf("%02x", result[loop_number]);
    }
 
    system("pause");
    return 0;
 
}
 
cs


Posted by JunkMam
,