반응형

일반적으로 문자열 비교는 '==' 연산자를 사용하거나 문자열 비교함수 'compare(_ :options:)'매서드를 사용한다.

그러나 위와 같이 결과 값이 True, False로 반환된 결과 값으로 처리할 경우 해당 결과 값을 변조하여 해당 조건문을 통과할 수 있다. 이러한 문제를 우회하기 위하여 아래와 같이 XOR 연산을 이용한 문자열 비교처리가 필요할 수 있다.

let str1 = "ABC123"
let str2 = "ABC123"

guard let utf8Bytes1 = str1.data(using: .utf8),
      let utf8Bytes2 = str2.data(using: .utf8) else {
    return
}

// 각각의 바이트 별로 xor한 결과값을 어레이로 반환
let xorResult = zip(utf8Bytes1, utf8Bytes2).map { $0.0 ^ $0.1 } // xor 비교

// xorResult의 모든 값이 0인지 체크 - 모두 0이어야 동일한 문자열 이다.
if (xorResult.allSatisfy { $0 == 0 }) {
    // 좀더 확실하게 막기 원한다면 다시한번 체크.
	for i in 0..<utf8Bytes1.count {
        if utf8Bytes1[i] ^ utf8Bytes2[i] != 0 {
            return
        }
    }
    
    // TODO : 작업은 여기에....
    
}

 

반응형

'개발 > iOS' 카테고리의 다른 글

UITextField 숫자 입력 시 콤마 추가 및 사용  (0) 2024.05.14
Floating, Dragging Button  (1) 2024.01.04
Rosetta2  (0) 2023.04.26
NFC tag read/write Manager Class (2/2)  (0) 2023.04.26
NFC tag read/write Manager Class (1/2)  (0) 2023.04.26
블로그 이미지

SKY STORY

,