사전적 의미
해시의 사전적 의미는 고기와 감자를 잘게 다져 섞어 요리한 것 입니다.
컴퓨터 공학적 의미
해시 함수는 임의의 길이의 값을 입력받아 고정된 길이의 결과 값을 출력하는 함수입니다. 해시 함수에 의해 얻어지는 값을 해시 값이라 하고 간단하게 해시라고 합니다.
예를 들어, 해시 함수에 "망고주스"라는 값을 입력하면 다음과 같은 해시 값을 얻을 수 있습니다.
HhXrhTV+Tl05pe/kQgTFPA8eMWe+SYJ0v9KwGJvKios=
해시의 특징
해시 함수는 같은 값을 입력하면 항상 같은 값을 얻을 수 있습니다. 따라서 두 해시 값이 다르다면 입력 값도 다르다는 것을 의미합니다. 이는 데이터의 오류나 변조를 탐지 할 수 있기에 무결성 검사에 사용됩니다.
하지만 해시 값이 같다고 해서 입력 값이 같다는 것을 보장해 주지 않습니다. 해시 함수가 서로 다른 두 개의 입력값에 대해 동일한 출력값을 내는 상황이 발생하기 때문이죠. 이를 해시 충돌이라 합니다.
해시 함수는 해시 값만으로는 원래 입력 값을 알아내기 힘들다는 사실에 의해 암호화에 사용되기도 합니다.
또한 키 값을 사용하면 같은 값을 입력해도 다른 값을 얻을 수 있습니다. 이를 이용해 전자서명이나 암호화에 사용됩니다.
샘플코드
값 입력 및 해시 값 얻기
using System;
using System.Text;
using System.Security.Cryptography;
class Program
{
static void Main(string[] args)
{
string MessageString = "망고주스";
// UnicodeEncoding 인스턴스 생성.
UnicodeEncoding UE = new UnicodeEncoding();
// 문자열을 바이트 배열로 변환.
byte[] MessageBytes = UE.GetBytes(MessageString);
// SHA1Managed 인스턴스 생성.
SHA256Managed SHhash = new SHA256Managed();
// 바이트 배열에서 해시 값 생성.
byte[] HashValue = SHhash.ComputeHash(MessageBytes);
// 해시값 출력.
Console.Write(Convert.ToBase64String(HashValue));
}
}
결과 출력
HhXrhTV+Tl05pe/kQgTFPA8eMWe+SYJ0v9KwGJvKios=
해시 값 검증
using System;
using System.Text;
using System.Security.Cryptography;
class Program
{
static void Main()
{
// "This is the original message!"에서 생성된 해시값.
string SentHashValue = "HhXrhTV+Tl05pe/kQgTFPA8eMWe+SYJ0v9KwGJvKios=";
// 해시 값과 비교할 문자열.
string MessageString = "망고주스";
// UnicodeEncoding 인스턴스 생성.
UnicodeEncoding UE = new UnicodeEncoding();
// 문자열을 바이트 배열로 변환.
byte[] MessageBytes = UE.GetBytes(MessageString);
// SHA1Managed 인스턴스 생성.
SHA256Managed SHhash = new SHA256Managed();
// 바이트 배열에서 해시 값 생성.
byte[] CompareHashValue = SHhash.ComputeHash(MessageBytes);
string CompareHashString = Convert.ToBase64String(CompareHashValue);
// 해시값과 같은지 출력.
if (SentHashValue.Equals(CompareHashString))
{
Console.WriteLine("The hash codes match.");
}
else
{
Console.WriteLine("The hash codes do not match.");
}
}
}
결과 출력
입력 값이 같을 경우
The hash codes match.
입력 값이 틀릴 경우
The hash codes do not match.
해시에 대하여 알아보았습니다.
해시는 정말 다양한 분야에서 사용되는 기술 입니다.
특히 블록체인 관련 글에서 해시라는 말을 많이 접하게 되는데요. 조금이라도 참고가 되고자 포스팅 합니다.
그럼 다음 포스트에서 뵙겠습니다.