반응형
일반적으로 문자열 비교는 '==' 연산자를 사용하거나 문자열 비교함수 '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 |