C#의 문자열에서 MD5 해시 계산

Harshit Jindal 2023년10월12일
  1. C#에서 MD5 알고리즘 사용
  2. System.Security.Cryptography 라이브러리를 사용하여 C# 문자열에서 MD5 해시 계산
C#의 문자열에서 MD5 해시 계산

해싱 알고리즘은 임의의 입력 데이터를 고정 크기 해시에 매핑하는 데 사용되는 수학적 알고리즘입니다. 해시 맵, 비밀번호 확인, 메시지 소화암호화폐 보안과 같은 데이터 구조에 데이터를 저장하는 것과 같은 여러 목적으로 사용됩니다.

MD5는 해싱 알고리즘의 메시지 다이제스트 클래스에 속합니다. Rivest는 MD5MD2, MD4 등과 같은 기타 알고리즘을 개발했습니다.

이 알고리즘은 원래 디지털 서명을 인증하도록 설계되었습니다. 그러나 나중에 더 이상 사용되지 않는 많은 취약점이 발견되었습니다.

그럼에도 불구하고 여전히 데이터 무결성 검증에 사용되며 고급 알고리즘을 이해하기 위한 기반을 형성합니다. MD5 알고리즘은 모든 메시지 소화 알고리즘과 마찬가지로 길이를 알 수 없는 메시지를 입력으로 받아 고정 크기 해시로 변환합니다.

입력 문자열을 약간 변경하면 완전히 다른 해시가 생성됩니다. 이 기사에서는 C#을 사용하여 MD5 해시를 계산하는 방법을 배웁니다.

C#에서 MD5 알고리즘 사용

MD5 알고리즘은 다음 네 가지 주요 단계로 구성됩니다.

먼저 패딩 비트를 추가합니다.

이 단계에서 패딩 비트를 추가하여 총 비트 수가 512의 가장 가까운 배수보다 64가 되도록 합니다. 알고리즘이 512 비트 크기의 데이터를 처리할 수 있도록 하고 2 단계에서 64 비트로 표현된 문자열의 길이를 추가하여 512의 짝수 배수를 얻습니다.

둘째, 길이 비트를 추가합니다.

64비트로 문자열의 길이를 계산합니다. 단계 1에서 형성된 출력에 추가하십시오.

셋째, MD 버퍼를 초기화합니다.

A, B, C, D라는 32 비트의 4 메시지 다이제스트 버퍼를 초기화합니다. 그것들은 다음과 같습니다:

A = 01 23 45 67
B = 89 ab cd ef
C = fe dc ba 98
D = 76 54 32 10

네 번째는 개별 512비트 블록의 처리입니다.

전체 비트는 512 크기의 블록으로 나뉩니다. 형성된 각 블록은 32 비트의 16 하위 블록으로 나뉩니다. 형성된 모든 16 블록은 A, B, CD 버퍼를 사용하여 일련의 4 작업을 통해 전달되어 최종 해시를 제공합니다.

System.Security.Cryptography 라이브러리를 사용하여 C# 문자열에서 MD5 해시 계산

using System;
using System.Security.Cryptography;
using System.Text;

public class Test {
  public static string ComputeMd5Hash(string message) {
    using (MD5 md5 = MD5.Create()) {
      byte[] input = Encoding.ASCII.GetBytes(message);
      byte[] hash = md5.ComputeHash(input);

      StringBuilder sb = new StringBuilder();
      for (int i = 0; i < hash.Length; i++) {
        sb.Append(hash[i].ToString("X2"));
      }
      return sb.ToString();
    }
  }
  public static void Main() {
    string message = "Welcome to DelfStack";
    Console.WriteLine(ComputeMd5Hash(message));
  }
}

출력:

53C62733BB54F2B720A32490E6C447FF

위의 프로그램에서 ComputeHash() 메서드를 통해 md5 알고리즘의 기성 구현을 제공하는 C#에 있는 MD5 클래스의 개체를 만듭니다.

ComputeHash() 메서드의 함수 서명과 일치하도록 메시지 문자열을 바이트 스트림으로 변환한 다음 바이트 스트림 형식으로 결과를 반환합니다. 그런 다음 문자열 빌더 클래스를 사용하여 바이트 스트림을 유효한 C# 문자열로 변환합니다.

Harshit Jindal avatar Harshit Jindal avatar

Harshit Jindal has done his Bachelors in Computer Science Engineering(2021) from DTU. He has always been a problem solver and now turned that into his profession. Currently working at M365 Cloud Security team(Torus) on Cloud Security Services and Datacenter Buildout Automation.

LinkedIn