(편집 :. 이제 해시 알고리즘 폐기 나는 그것이 불필요 의심하지만 좋은 방법 :
당신은 당신 만의 부분을 해싱한다하더라도 전체 버퍼 ComputeHash를 호출하는 것입니다 읽은 버퍼. 또한 읽기 호출마다 새 해시를 계산합니다.
여기 해시를 계산하기 위해 몇 가지 정말 간단한 코드입니다 :
using System;
using System.IO;
using System.Security.Cryptography;
class Test
{
static void Main()
{
byte[] plaintext = File.ReadAllBytes("b.txt");
using (MD5 md5 = MD5.Create())
{
byte[] md5Hash = md5.ComputeHash(plaintext);
Console.WriteLine(BitConverter.ToString(md5Hash));
}
using (SHA1 sha1 = SHA1.Create())
{
byte[] sha1Hash = sha1.ComputeHash(plaintext);
Console.WriteLine(BitConverter.ToString(sha1Hash));
}
}
}
이것은 위키 피 디아에 따라 결과를 제공합니다 - b.txt
은 그것의 끝에 줄 바꿈이 안됩니다.
것으로 시작하는 바이너리 데이터를 가져 오는 다른 방법이 그냥 한 번에 해시를 계산하는 간단한 방법입니다
byte[] plaintext = Encoding.ASCII.GetBytes(
"The quick brown fox jumps over the lazy dog");
참고. 스트리밍 방식 (일부 데이터를 읽은 곳, 해시에 추가, 더 많은 데이터 읽기 등)을 수행하려면 ComputeHash(Stream)
오버로드를 사용하거나 (데이터를 "밀어 넣기"를 원할 경우))이 같은 TransformBlock
및 TransformFinalBlock
, 사용할 수 있습니다
using System.Text;
class Test
{
static void Main()
{
using (MD5 md5 = MD5.Create())
using (SHA1 sha1 = SHA1.Create())
using (Stream input = File.OpenRead("b.txt"))
{
// Artificially small to make sure there's
// more than one read
byte[] buffer = new byte[4];
int bytesRead;
while ((bytesRead = input.Read(buffer, 0, buffer.Length)) > 0)
{
md5.TransformBlock(buffer, 0, bytesRead, null, 0);
sha1.TransformBlock(buffer, 0, bytesRead, null, 0);
}
md5.TransformFinalBlock(buffer, 0, 0);
sha1.TransformFinalBlock(buffer, 0, 0);
Console.WriteLine(BitConverter.ToString(md5.Hash));
Console.WriteLine(BitConverter.ToString(sha1.Hash));
}
}
}
주 우리가 어떤 출력을 필요로하지 않으며, 우리가 마지막 블록에 데이터를 변환하지 않기 때문에 우리가 TransformBlock
에 null
를 전달하는 방법. 나는 이것이 당신이 이전에 언급 한 것을 토대로 사용하고자하는 예라고 생각합니다.
스트리밍 방식으로 읽을 필요가 있습니다. 홀수 인 경우 내 파일이 여러 GB가 될 수 있기 때문입니다. 위키 피 디아에서 같은 해시를 언급했는지 여부를 확인하는 것이 전적으로 예제입니다. 스트리밍 부분이 어렵다. ComputeHash가 현재 해시 값을 알려주지 못하는 것 같습니다. –
@acidzombie : 편집을 참조하십시오. - 내가 준 두 번째 예제가 필요하다고 생각합니다. –
완벽하고 완벽합니다. 환상적입니다. 감사합니다. D –