이 코드에서 CarHasher 구조체는 () 연산자를 재정의한 함수 객체로, std::unordered_set 또는 std::unordered_map 객체를 생성할 때 템플릿 매개변수로 사용됩니다. 또한 CarComparator 구조체는 비교자의 역할을 하며, 마찬가지로 템플릿 매개변수로 사용됩니다. 이러한 방식을 사용하면 서로 다른 타입의 해시 함수와 비교자를 사용하는 여러 객체를 만들 수 있습니다.
해시 함수로 MD5, SHA-1, SHA-256 같은 복잡한 암호화 함수도 사용할 수 있습니다. 이들 알고리즘은 매우 복잡하며 파일 같은 다양한 종류의 데이터를 입력으로 받을 수 있습니다. 암호화 함수를 사용할 경우, 해시 값으로부터 원본 데이터를 알아내는 역해싱(reverse hashing)이 매우 어렵기 때문에 보안 시스템에서 사용되기도 합니다. 예를 들어 비트코인 블록체인은 SHA-256 알고리즘을 사용하여 거래 내역의 진위 증명을 기록합니다.2 블록체인의 각 블록은 이전에 연결되었던 블록의 SHA-256 해시 값을 저장하고 있고, 현재 블록의 해시는 다음 블록에 저장됩니다. 특정 블록을 임의로 수정할 경우, 수정한 블록의 해시 값이 다음 블록에 저장된 값과 일치하지 않게 되므로 전체 블록체인이 무효화됩니다. 아무리 빠른 슈퍼 컴퓨터를 사용한다 하더라도 위조된 거래 내역을 만드는 데 수백 년의 시간이 걸릴 것입니다.
2 역주 SHA는 안전한 해시 알고리즘(Secure Hash Algorithm)을 의미하고, SHA-256은 256비트 해시 값을 생성하는 안전한 해시 알고리즘입니다.