공통 C++빌더와 델파이를 이용한 SHA 해시
2018.05.21 15:24
*JIM MCKEETH가 2018년 5월 11일 자신의 블로그에 올린 자료를 번역해 놓은 것입니다.
늘 암호화와 압축에 관심이 있었지만 그래도 아마 가장 관심 갖고 좋아하는 것은
암호화 해시 함수 일 것입니다. 해시 함수는 모든 크기의 입력을 받아 항상 동일한
크기의 출력을 생성하는 단방향 알고리즘입니다.
단방향은 정보 손실이 발생합니다 -- 출력에서 입력으로 다시 쉽게 갈 수 없습니다.
암호화 해시는 해시 함수의 보다 안전한 버전입니 다.데이터가 수정되지 않았음을
확인하기 위해 서명하는 데 가장 자주 사용됩니다.
위키백과에 따르면 이상적인 암호화 해시 함수에는 5 가지 주요 속성이 있습니다.
- 동일한 메시지가 동일한 해시를 유발하도록 결정론적입니다.
- 주어진 메시지에 대한 해시 값을 계산하는 것이 빠릅니다
- 가능한 모든 메시지를 시도하는 것 외에는 해시 값에서 메시지를 생성하는 것은 불가능합니다
- 메시지를 조금만 변경하면 해시 값이 너무 넓어 져서 새 해시 값이 이전 해시 값과 상관 관계가 없어 보입니다.
- 동일한 해시 값을 가진 두 개의 서로 다른 메시지를 찾는 것은 불가능합니다.
(위 이미지: SHA 제품군 아이콘(by Uwe Martens) - CC BY-SA 4.0)
메시지 다이제스트 계열의 암호화 해시는 자주 사용하던 해시 알고리즘이었지만 불안한 점들이 발견되었습니다.
이제 SHA가 현대 암호의 주요 방법으로 여겨집니다.
해시 지원의 기초는 2009년 출시 때 RTL에서 처음으로 시작되었지만 XE8 (2015)에는 MD5, SHA-1 및 Bob Jenkins 해시를 지원하는 System.Hash 유닛이 있습니다. 그런 다음 10.0 시애틀 (2015)에서 SHA-2 지원으로 확장되었습니다. 가장 최근에는 10.2 Tokyo (2017)에서 원래 바이트 입력 외에 문자열 또는 스트림을 허용하도록 해시 함수가 확장되었습니다.
SHA 제품군에는 SHA-0, SHA-1, SHA-2 및 SHA-3 해시제품 군이 포함됩니다. SHA-0은 더 이상 사용되지 않으며 SHA-3는 SHA-2의 향상된 기능입니다. 실제로 SHA-1 또는 SHA-2를 사용하는 대부분의 해시를 볼 수 있습니다. SHA-1은 항상 160 비트 (20 바이트) 해시 (다이제스트)를 생성하지만 SHA-2는 224, 256, 384 및 512 비트 출력을 포함하므로 더 안전하고 유연합니다. SHA 256 및 512는 32 비트 및 64 비트 워드 크기 해시 알고리즘을 나타냅니다. SHA-224와 SHA-384는 서로 다른 초기값을 가지고 계산한 SHA-256과 SHA-512 해시값을 최종 해시값 길이에 맞춰 잘라낸 것이다.
C ++ 빌더와 델파이에서는 어떻게 사용하는지 궁금하실 것입니다. System.Hash 유닛을 포함하고 나면 THashSHA2 클래스의 메소드를 사용하여 다이제스트를 작성할 수 있습니다. GetHashString을 사용하는 방법을 설명 하겠지만 다른 변형도 사용할 수 있습니다. GetHashString은 문자열 또는 스트림을 취해 해시의 16 진수 문자열을 반환합니다.
C ++ 빌더 코드는 다음과 같습니다:
Edit512->Text = THashSHA2::GetHashString( EditMessage->Text, THashSHA2::TSHA2Version::SHA512); |
델파이에서의 코드는 다음과 같습니다:
Edit512.Text := THashSHA2.GetHashString( EditMessage.Text, THashSHA2.TSHA2Version.SHA512).ToUpper; |
제가 제공하는 문서에서 모든 다른 해시를 생성하는 간단한 샘플 앱을 만들었습니다. FireMonkey 앱이므로 모든 플랫폼에서 작동하지만 해시 코드는 모든 유형의 앱에서 작동합니다. C ++과 델파이 버전이 모두 포함되어 있습니다.