*JIM MCKEETH가 2018년 5월 11일 자신의 블로그에 올린 자료를 번역해 놓은 것입니다.

 
 
 
1.png

늘 암호화와 압축에 관심이 있었지만 그래도 아마 가장 관심 갖고 좋아하는 것은  
암호화 해시 함수 일 
것입니다. 해시 함수는 모든 크기의 입력을 받아 항상 동일한
크기의 출력을 생성하는 단방향 알고리즘입니다.

단방향은 정보  손실이 발생합니다 -- 출력에서 입력으로 다시 쉽게 갈 수 없습니다.

암호화 해시는 해시 함수의 보다 안전한 버전입니 다.데이터가 수정되지 않았음을
확인하기 위해 서명하는 데
가장  자주 사용됩니다. 

 

위키백과에 따르면 이상적인 암호화 해시 함수에는 5 가지 주요 속성이 있습니다.

  • 동일한 메시지가 동일한 해시를 유발하도록 결정론적입니다.

     

  • 주어진 메시지에 대한 해시 값을 계산하는 것이 빠릅니다

     

  • 가능한 모든 메시지를 시도하는 것 외에는 해시 값에서 메시지를 생성하는 것은 불가능합니다

     

  • 메시지를 조금만 변경하면 해시 값이 너무 넓어 져서 새 해시 값이 이전 해시 값과 상관 관계가 없어 보입니다.

     

  • 동일한 해시 값을 가진 두 개의 서로 다른 메시지를 찾는 것은 불가능합니다.

 

(위 이미지: SHA 제품군 아이콘(by Uwe Martens) - CC BY-SA 4.0)

 

 

2.png

 

메시지 다이제스트 계열의 암호화 해시는 자주 사용하던 해시 알고리즘이었지만 불안한 점들이 발견되었습니다.
이제 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 ++과 델파이 버전이 모두 포함되어 있습니다.

TRB50R.png

 

 

 

 

번호 제목 글쓴이 날짜 조회 수
공지 [DelphiCon 요약] 코드사이트 로깅 실전 활용 기법 (Real-world CodeSite Logging Techniques) 관리자 2021.01.19 665297
공지 [UX Summit 요약] 오른쪽 클릭은 옳다 (Right Click is Right) 관리자 2020.11.16 662920
공지 [10.4 시드니] What's NEW! 신기능 자세히 보기 관리자 2020.05.27 665314
공지 RAD스튜디오(델파이,C++빌더) - 고객 사례 목록 관리자 2018.10.23 668462
공지 [데브기어 컨설팅] 모바일 앱 & 업그레이드 마이그레이션 [1] 관리자 2017.02.06 668141
공지 [전체 목록] 이 달의 기술자료 & 기술레터 관리자 2017.02.06 664747
공지 RAD스튜디오(델파이, C++빌더) - 시작하기 [1] 관리자 2015.06.30 675145
공지 RAD스튜디오(델파이,C++빌더) - 모바일 앱 개발 사례 (2020년 11월 업데이트 됨) 험프리 2014.01.16 870651
843 Ext JS 활용과 앞으로의 방향 관리자 2018.05.24 4202
842 C++과 파이어몽키로 멋진 UI 완성하기 관리자 2018.05.21 5332
» C++빌더와 델파이를 이용한 SHA 해시 file 김원경 2018.05.21 5382
840 [고객사례-브라우저, 델파이] BriskBard 관리자 2018.05.10 2307
839 C++에서 LINQ 사용 file 험프리 2018.05.09 2465
838 델파이로 3D 크레딧 스크롤 구현하기(소스제공) file 험프리 2018.05.09 2379
837 [업데이트][패치][10.2.3] RAD 스튜디오 - iOS 11.3 패치 험프리 2018.05.09 2231
836 패키지 개발방식과 DLL개발방식의 차이와 장단점 김원경 2018.05.02 3668
835 이 달의 기술자료 - 2018년 05월 file 험프리 2018.04.27 1775
834 10.2.3 새로운 기능: 파이어몽키 UI 템플릿 - 프로필 화면 관리자 2018.04.24 2171
833 센차 ExtJS 웹 클라이언트 + RAD서버 10.2.3 관리자 2018.04.24 3038
832 [업데이트][패치][10.2.3] RAD스튜디오 10.2.3 패치와 새로운 기술 정보들 관리자 2018.04.24 2048
831 [고객사례-비콘, 위치 추적, RAD스튜디오, RAD서버] BEAM 관리자 2018.04.18 4325
830 이 달의 기술자료 - 2018년 04월 file 험프리 2018.03.30 1746
829 [10.2 도쿄][릴리즈3] RAD서버에서 센차 Ext JS 지원 확장 관리자 2018.03.30 2567
828 [10.2 도쿄][릴리즈3] C++빌더 리네임 리팩토링 지원 관리자 2018.03.30 1771
827 [10.2 도쿄][릴리즈3] 파이어몽키 UI 템플릿 관리자 2018.03.30 2082
826 [10.2 도쿄][릴리즈3] CMake 커맨드 라인 지원 관리자 2018.03.30 1927
825 [고객사례-위치확인, 배터리 문제 해결, 모바일, 델파이] WhereontheMap [1] 관리자 2018.03.29 2608
824 [발표자료] 20180315 마이그레이션, 생각보다 더 쉽습니다 (C++빌더, 델파이) file 관리자 2018.03.19 3162