이전에 SHA1 + MD5를 결합하는 것에 대해 question에게 물었습니다.하지만 그 후에 SHA1을 계산하는 것을 이해 한 다음 lagrge 파일의 MD5가 SHA256보다 빠릅니다. 필자의 경우 4.6GB 파일은 Linux 시스템에서 (C# MONO)를 기본 구현 SHA256으로 약 10 분이 소요됩니다. 파일 가져 오기 SHA256 해시 코드 및 체크섬
public static string GetChecksum(string file)
{
using (FileStream stream = File.OpenRead(file))
{
var sha = new SHA256Managed();
byte[] checksum = sha.ComputeHash(stream);
return BitConverter.ToString(checksum).Replace("-", String.Empty);
}
}
은 그 때 나는
this topic 어떻게 든 그들이에 말에 따라 코드를 변경 읽어
public static string GetChecksumBuffered(Stream stream)
{
using (var bufferedStream = new BufferedStream(stream, 1024 * 32))
{
var sha = new SHA256Managed();
byte[] checksum = sha.ComputeHash(bufferedStream);
return BitConverter.ToString(checksum).Replace("-", String.Empty);
}
}
을하지만 그것은 그러한 애정이없는 약 9 분 소요됩니다.
그런 다음 동일한 파일에 대해 리눅스에서 sha256sum
명령을 사용하여 파일을 테스트하려고합니다. 위의 코드와 Linux 명령이 모두 같은 결과를 나타냅니다.
누군가 해시 코드와 체크섬의 차이점에 대해 읽으라고 조언했으며, 차이점을 설명하는 this topic에 도달했습니다.
내 질문은 다음과 같습니다
위의 코드와 시간에 리눅스sha256sum
사이의 서로 다른 원인이 무엇
?
위의 코드는 무엇을 수행합니까? (해시 코드 계산 또는 체크섬 계산을 의미합니까? C#에서 파일의 해시 코드와 파일의 체크섬을 검색하면 두 코드 모두 위의 코드에 도달합니다.)
SHA256이 충돌에 저항력이 있더라도
sha256sum
에 대한 동기 부여 된 공격은 무엇입니까?C#에서
sha256sum
만큼 빨리 구현할 수 있습니까?
'프로세스'를 사용하여 코드에서 'sha256sum'을 호출 할 수없는 이유가 있습니까? –
@NateDiamond 예! 먼저이 프로그램은 리눅스뿐만 아니라 Windows에서 실행되어야합니다. 두 번째는 내 질문에 언급했듯이 체크섬의 안전성이 충분한 지 여부 (또는 해시 코드) –
디스크에서 파일을 읽는 비용으로 완전히 조정해야합니다. 9 분은 상상도 할 수 없지만 엉뚱한 스핀들 드라이브와 충분한 RAM이없는 값싼 노트북이 필요합니다. 사용하는 것을 문서화하십시오. –