2025.01.02
KISA의 SHA256을 다시 테스트 하다보니 무언가 이상해서 다시 정리.
https://seed.kisa.or.kr/kisa/Board/21/detailView.do
gcc는 warnig, g++ 로 컴파일 하면 에러 발생
invalid conversion from 'UINT* {aka unsigned int*}' to 'ULONG_PTR {aka long unsigned int*}' [-fpermissive]
SHA256_Encrpyt
|- SHA256_Process
|- SHA256_Transform
Pointer로 전달해야 되는데 typecasting이 안된 것 같다.
그리고, SHA256 입력이 64Byte(512bit) 단위로 팩킹되고 마지막에 0x80 추가된다고 알고 있는데,
KISA코드에서는 Process.Transform 으로 한번 처리하고 Close.Transform에서 0x80관련 코드가 있다.
str(block_number) + transactions + previous_hash + str(nonce) => text
text + 8'b1000_0000 + 8'b0000_0000 * n + 64'b(text size [bit]) = message (512'b * m) -> SHA256
원래 알고 있던 개념으로 테스트하면 정상적으로 출력된다.
Initial hash value
H[0] 6a09e667
H[1] bb67ae85
H[2] 3c6ef372
H[3] a54ff53a
H[4] 510e527f
H[5] 9b05688c
H[6] 1f83d9ab
H[7] 5be0cd19
Input Message: "abc"
Digest: BA7816BF 8F01CFEA 414140DE 5DAE2223 B00361A3 96177A9C B410FF61 F20015AD
Input Message: "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"
Digest: 248D6A61 D20638B8 E5C02693 0C3E6039 A33CE459 64FF2167 F6ECEDD4 19DB06C1
KISA 결과
int main(int argc, char* argv[])
{
unsigned char i_d[1024]={0,};
unsigned char o_d[32]={0,};
string i_string = "abc";
unsigned int len=0;
len = i_string.length();
for (int i=0;i<len;i++) i_d[i] = i_string[i];
SHA256_Encrypt(i_d, len, o_d);
cout << i_string << endl;
for (int i=0;i<32;i++) printf("%02x", o_d[i]);
return 0;
}
abc
8302f36526bc91ea7a9b15da985370bd477545ca25abd0c51eed56a3c560f074
https://csihyeon.tistory.com/46
zedwood 에서 받은 sha256으로 "abc" -> BA7816BF 8F01CFEA 414140DE 5DAE2223 B00361A3 96177A9C B410FF61 F20015AD
는 확인 되었는데
bitcoin 정보를 가지고 하면 블로그 결과와 다르다.
https://www.analyticsvidhya.com/blog/2021/05/how-to-mine-bitcoin-using-python-part-i/
C++ 코드 영향일 수도 있으니 Python으로.
2024.01.03
https://emn178.github.io/online-tools/sha256.html
여기에서 테스트하니 정상
abc
ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad
abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq
248d6a61d20638b8e5c026930c3e6039a33ce45964ff2167f6ecedd419db06c1
BitCoin Python 예제로 하면 비정상
684260
A->B->10
B->c->5
000000000000000000006bd3d6ef94d8a01de84e171d3553534783b128f06aad
36674
50b29f77f0b970646939619caa6b561b4f1d3418898089335a559875c30361fa
String을 어떻게 하느냐에 따라 결과가 다르다.
684260
A->B->10
B->c->5
000000000000000000006bd3d6ef94d8a01de84e171d3553534783b128f06aad36674
000086ae35230f32b08e9da254bd7ba1b351f11d40bde27a7ebd5e7ec9568f8d
C Code의 string에서도 줄바꿈 처리가 필요
string i_string = "684260\nA->B->10\nB->c->5\n000000000000000000006bd3d6ef94d8a01de84e171d3553534783b128f06aad36674";
수정된 KISA 코드에서는 정상 출력
'IT' 카테고리의 다른 글
[현미경] FHD 500x & 200x + YIZHAN 테스트 (0) | 2025.01.04 |
---|---|
[개발환경] VSCode 설정 파일 (0) | 2025.01.04 |
[현미경] EMZ-TR + 링라이트 (0) | 2024.12.31 |
[현미경] 구조 분석 (0) | 2024.12.29 |
[드론] MJX Bugs3 업그레이드 2 (0) | 2024.12.26 |