무작위 화없이 구조체를 기본적으로 해시하는 방법은 무엇입니까?

산성 문

Swift에서 기본적으로 무작위 화없이 구조체를 해시 할 수 있습니까?

struct Kiwi: Hashable {
    let userId: String
    let selections: Set<Int>
    
    init(userId: String, selections: Set<Int>) {
        self.userId = userId
        self.selections = selections
    }

    func hash(into hasher: inout Hasher) {
        hasher.combine(userId)
        hasher.combine(selections)
    }
}

let k1 = Kiwi(userId: "u1", selections: [1])
print(k1.hashValue)

let k2 = Kiwi(userId: "u1", selections: [1])
print(k2.hashValue)

이러한 해시 값은 다른 실행 지점에서 동일하다고 보장되지 않습니다 (해싱 함수의 무작위 화로 인해). 이 해시의 목적은 단순히 구조체 값의 서명을 생성하여 구조체 값이 실행되는시기에 관계없이 동일하면 항상 동일하도록하는 것입니다.

당분간 저는 구조체를 Equatable만들고 구조체 인스턴스를 비교했지만 대신 "서명"(즉, 해시)을 비교할 수 있기를 원합니다.

알렉산더

다음과 같은 고유 한 프로토콜을 만들어야합니다.

protocol Signable {
    /// A signature that's stable across app launches
    var signature: Signature { get }
}

Equatable/ Hashable는 매우 구체적인 의미를 가진 표준 프로토콜입니다 (Equality는 대체 가능성을 의미하고 Hashability는 성능 최적화로 휴리스틱입니다 Equatable). 동등성 검사 또는 해싱과 모호하게 유사한 모든 구문을 포괄하는 구문이 아닙니다.

또한 조심하십시오 무작위 시드 행동 의가 Hasher있다 의도적 . 해시 넘치는 DoS 공격 으로부터 사용자를 보호합니다 . 이 벡터에 자신을 노출 할 것이기 때문에 이것을 우회하는 데 매우주의해야합니다.

signature앱 실행시 지속되는 인스턴스를 비교하는 데 사용 하는 것이 좋습니다. 그러나 선형 시간 조회로 퇴화하기 위해 공격받을 수있는 해시 된 데이터 구조를 구현하는 데 사용 하지 않는 것이 좋습니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

byobu를 기본적으로 터미네이터로 시작하는 방법은 무엇입니까?

분류에서Dev

byobu를 기본적으로 터미네이터로 시작하는 방법은 무엇입니까?

분류에서Dev

빈 구조체를 초기화하는 방법은 무엇입니까?

분류에서Dev

창이로드 될 때 기본적으로 Entry 위젯에 커서를 놓는 방법은 무엇입니까?

분류에서Dev

주어진 주소를 기반으로 구조체를 초기화하는 방법은 무엇입니까?

분류에서Dev

C ++로 구조화하기 위해 데이터베이스를로드하는 방법은 무엇입니까?

분류에서Dev

일관성없는 구조로 SoapClient에서 PHP 개체를 "정규화"하는 방법은 무엇입니까?

분류에서Dev

swrevealviewcontroller로 애플리케이션을 시작하기 위해 메뉴를 여는 방법은 무엇입니까?

분류에서Dev

SSIS-차원 테이블을 작성하기 위해 Nested Set 구조체를 처리하는 방법은 무엇입니까?

분류에서Dev

PhraseExpress의 각 새 구문에 대해 기본적으로«즉시 실행»하는 방법은 무엇입니까?

분류에서Dev

기본적으로 블루투스를 비활성화하는 방법은 무엇입니까?

분류에서Dev

기본 App 구조체 내에서 EnviromentObject를 초기화하는 방법은 무엇입니까?

분류에서Dev

Python 용 SWIG에서 생성시 C 구조체 멤버를 초기화하는 방법은 무엇입니까?

분류에서Dev

Julia에서 깊은 중첩 구조체를 초기화 / 구성하는 방법은 무엇입니까?

분류에서Dev

기본적으로 메인 화면 위에 VGA 출력을 표시하는 방법은 무엇입니까?

분류에서Dev

tmux 이름 바꾸기 창 프롬프트를 기본적으로 비우는 방법은 무엇입니까?

분류에서Dev

C ++ 구조체를 동적으로 만드는 방법은 무엇입니까?

분류에서Dev

천 단위 구분 기호를 피하기 위해이 SQL 조각을 다시 형식화하는 가장 좋은 방법은 무엇입니까?

분류에서Dev

기본적으로 tmux를 시작하여 명령을 실행하는 방법은 무엇입니까?

분류에서Dev

함수의 힙에서 정적 구조체를 초기화하는 방법은 무엇입니까?

분류에서Dev

대량의 작은 작업 속도를 높이기 위해 다중 처리를 효율적으로 사용하는 방법은 무엇입니까?

분류에서Dev

비즈니스 논리를 적용하기 위해이 LINQ를 작성하는 방법은 무엇입니까?

분류에서Dev

Progress Developer Studio에서 기본적으로 시작 .ini를 설정하는 방법은 무엇입니까?

분류에서Dev

마우스 이벤트없이 기본적으로 마커 콘텐츠를 표시하는 방법은 무엇입니까?

분류에서Dev

클릭 이벤트를 각도로 선택적으로 무시하기 위해 컨테이너 / div의 일부를 만드는 방법은 무엇입니까?

분류에서Dev

이 구조화되지 않은 데이터를 구조화로 변환하는 방법은 무엇입니까?

분류에서Dev

파이썬으로 재무 계산기를 구축하기 위해 백분율로 계산 공식을 작성하는 방법은 무엇입니까?

분류에서Dev

기본적으로 Flutter에있는 오른쪽 대신 드롭 다운 화살표를 왼쪽으로 이동하는 방법은 무엇입니까?

분류에서Dev

테이블보기 성능을 향상시키기 위해 이미지를 비동기 적으로로드하는 방법은 무엇입니까?

Related 관련 기사

  1. 1

    byobu를 기본적으로 터미네이터로 시작하는 방법은 무엇입니까?

  2. 2

    byobu를 기본적으로 터미네이터로 시작하는 방법은 무엇입니까?

  3. 3

    빈 구조체를 초기화하는 방법은 무엇입니까?

  4. 4

    창이로드 될 때 기본적으로 Entry 위젯에 커서를 놓는 방법은 무엇입니까?

  5. 5

    주어진 주소를 기반으로 구조체를 초기화하는 방법은 무엇입니까?

  6. 6

    C ++로 구조화하기 위해 데이터베이스를로드하는 방법은 무엇입니까?

  7. 7

    일관성없는 구조로 SoapClient에서 PHP 개체를 "정규화"하는 방법은 무엇입니까?

  8. 8

    swrevealviewcontroller로 애플리케이션을 시작하기 위해 메뉴를 여는 방법은 무엇입니까?

  9. 9

    SSIS-차원 테이블을 작성하기 위해 Nested Set 구조체를 처리하는 방법은 무엇입니까?

  10. 10

    PhraseExpress의 각 새 구문에 대해 기본적으로«즉시 실행»하는 방법은 무엇입니까?

  11. 11

    기본적으로 블루투스를 비활성화하는 방법은 무엇입니까?

  12. 12

    기본 App 구조체 내에서 EnviromentObject를 초기화하는 방법은 무엇입니까?

  13. 13

    Python 용 SWIG에서 생성시 C 구조체 멤버를 초기화하는 방법은 무엇입니까?

  14. 14

    Julia에서 깊은 중첩 구조체를 초기화 / 구성하는 방법은 무엇입니까?

  15. 15

    기본적으로 메인 화면 위에 VGA 출력을 표시하는 방법은 무엇입니까?

  16. 16

    tmux 이름 바꾸기 창 프롬프트를 기본적으로 비우는 방법은 무엇입니까?

  17. 17

    C ++ 구조체를 동적으로 만드는 방법은 무엇입니까?

  18. 18

    천 단위 구분 기호를 피하기 위해이 SQL 조각을 다시 형식화하는 가장 좋은 방법은 무엇입니까?

  19. 19

    기본적으로 tmux를 시작하여 명령을 실행하는 방법은 무엇입니까?

  20. 20

    함수의 힙에서 정적 구조체를 초기화하는 방법은 무엇입니까?

  21. 21

    대량의 작은 작업 속도를 높이기 위해 다중 처리를 효율적으로 사용하는 방법은 무엇입니까?

  22. 22

    비즈니스 논리를 적용하기 위해이 LINQ를 작성하는 방법은 무엇입니까?

  23. 23

    Progress Developer Studio에서 기본적으로 시작 .ini를 설정하는 방법은 무엇입니까?

  24. 24

    마우스 이벤트없이 기본적으로 마커 콘텐츠를 표시하는 방법은 무엇입니까?

  25. 25

    클릭 이벤트를 각도로 선택적으로 무시하기 위해 컨테이너 / div의 일부를 만드는 방법은 무엇입니까?

  26. 26

    이 구조화되지 않은 데이터를 구조화로 변환하는 방법은 무엇입니까?

  27. 27

    파이썬으로 재무 계산기를 구축하기 위해 백분율로 계산 공식을 작성하는 방법은 무엇입니까?

  28. 28

    기본적으로 Flutter에있는 오른쪽 대신 드롭 다운 화살표를 왼쪽으로 이동하는 방법은 무엇입니까?

  29. 29

    테이블보기 성능을 향상시키기 위해 이미지를 비동기 적으로로드하는 방법은 무엇입니까?

뜨겁다태그

보관