Notice
Recent Posts
Recent Comments
Link
투케이2K
22. (swift/xcode) aes 암호화 인코딩 (encode) , 디코딩 (decode) 수행 실시 - CryptoSwift 라이브러리 본문
Swift
22. (swift/xcode) aes 암호화 인코딩 (encode) , 디코딩 (decode) 수행 실시 - CryptoSwift 라이브러리
투케이2K 2021. 10. 23. 21:28[개발 환경 설정]
개발 툴 : XCODE
개발 언어 : SWIFT
[소스 코드]
import Foundation
import CryptoSwift
class C_AesUtil {
// MARK: [클래스 설명]
/*
1. AES 암호화 란 비밀키를 사용해 인코딩 , 디코딩을 수행하는 암호화 기법입니다
2. AES 128 [key] : 16 byte
3. AES 192 [key] : 24 byte
4. AES 256 [key] : 32 byte
5. 필수 사항 : CryptoSwift 라이브러리 설치
6. CryptoSwift 라이브러리 git 주소 : https://github.com/krzyzanowskim/CryptoSwift
7. 패키지 import : import CryptoSwift
*/
// MARK: [aes 인코딩 및 디코딩 key 값 지정]
private let AES128_SECRET_KEY = "0123456789abcdef"
//private let AES128_IV = "0123456789abcdef" // lv 지정
private let AES128_IV = "" // lv null 지정
private let AES192_SECRET_KEY = "0123456789abcdefghijklmn"
//private let AES192_IV = "0123456789abcdef" // lv 지정
private let AES192_IV = "" // lv null 지정
private let AES256_SECRET_KEY = "0123456789abcdef0123456789abcdef"
//private let AES256_IV = "0123456789abcdef" // lv 지정
private let AES256_IV = "" // lv null 지정
// MARK: [aes128 설정 값 지정 및 인코딩, 디코딩 메소드 지정]
func getAES128Object() -> AES { // [설정 값]
let keyDecodes : Array<UInt8> = Array(AES128_SECRET_KEY.utf8)
var ivDecodes : Array<UInt8> = []
if self.AES128_IV != "" || self.AES128_IV.count > 0 {
ivDecodes = Array(AES128_IV.utf8)
}
else {
ivDecodes = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
}
let aesObject = try! AES(key: keyDecodes, blockMode: CBC(iv: ivDecodes), padding: .pkcs5)
return aesObject
}
func setAES128Encrypt(string: String) -> String { // [인코딩]
guard !string.isEmpty else { return "" }
return try! self.getAES128Object().encrypt(string.bytes).toBase64()
}
func getAES128Decrypt(encoded: String) -> String { // [디코딩]
let datas = Data(base64Encoded: encoded)
guard datas != nil else {
return ""
}
let bytes = datas!.bytes
let decode = try! self.getAES128Object().decrypt(bytes)
return String(bytes: decode, encoding: .utf8) ?? ""
}
// MARK: [aes192 설정 값 지정 및 인코딩, 디코딩 메소드 지정]
func getAES192Object() -> AES { // [설정 값]
let keyDecodes : Array<UInt8> = Array(AES192_SECRET_KEY.utf8)
var ivDecodes : Array<UInt8> = []
if self.AES192_IV != "" || self.AES192_IV.count > 0 {
ivDecodes = Array(AES192_IV.utf8)
}
else {
ivDecodes = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
}
let aesObject = try! AES(key: keyDecodes, blockMode: CBC(iv: ivDecodes), padding: .pkcs5)
return aesObject
}
func setAES192Encrypt(string: String) -> String { // [인코딩]
guard !string.isEmpty else { return "" }
return try! self.getAES192Object().encrypt(string.bytes).toBase64()
}
func getAES192Decrypt(encoded: String) -> String { // [디코딩]
let datas = Data(base64Encoded: encoded)
guard datas != nil else {
return ""
}
let bytes = datas!.bytes
let decode = try! self.getAES192Object().decrypt(bytes)
return String(bytes: decode, encoding: .utf8) ?? ""
}
// MARK: [aes256 설정 값 지정 및 인코딩, 디코딩 메소드 지정]
func getAES256Object() -> AES { // [설정 값]
let keyDecodes : Array<UInt8> = Array(AES256_SECRET_KEY.utf8)
var ivDecodes : Array<UInt8> = []
if self.AES256_IV != "" || self.AES256_IV.count > 0 {
ivDecodes = Array(AES256_IV.utf8)
}
else {
ivDecodes = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
}
let aesObject = try! AES(key: keyDecodes, blockMode: CBC(iv: ivDecodes), padding: .pkcs5)
return aesObject
}
func setAES256Encrypt(string: String) -> String { // [인코딩]
guard !string.isEmpty else { return "" }
return try! self.getAES256Object().encrypt(string.bytes).toBase64()
}
func getAES256Decrypt(encoded: String) -> String { // [디코딩]
let datas = Data(base64Encoded: encoded)
guard datas != nil else {
return ""
}
let bytes = datas!.bytes
let decode = try! self.getAES256Object().decrypt(bytes)
return String(bytes: decode, encoding: .utf8) ?? ""
}
}
[결과 출력]
[xcode 라이브러리 추가 방법 설명 참고]
https://blog.naver.com/kkh0977/222546083903
[온라인 AES 인코딩 , 디코딩 참고]
https://blog.naver.com/kkh0977/222447254921
반응형
'Swift' 카테고리의 다른 글
24. (swift/xcode) 정규식 사용해 특수 문자 및 공백 제거 실시 - NSRegularExpression (0) | 2021.11.01 |
---|---|
23. (swift/xcode) 24 시간 형태 현재 날짜 , 시간 , 요일 표시 수행 - DateFormatter (0) | 2021.10.31 |
21. (swift/xcode) 특정 문자열로 시작 및 종료 여부 확인 실시 - hasPrefix , hasSuffix (0) | 2021.10.20 |
20. (swift/xcode) json 생성 및 파싱 수행 - jsonObject , jsonArray (0) | 2021.10.14 |
19. (swift/xcode) base64 encode 인코딩 , decode 디코딩 수행 실시 (0) | 2021.10.14 |
Comments