//Bridging-Header.h 추가
#import <CommonCrypto/CommonDigest.h>

 


// 알고리즘 종류별 해시값 생성
enum ALGORITHM: String {
	case MD2
	case MD4
	case MD5
	case SHA1
	case SHA224
	case SHA256
	case SHA384
	case SHA512
}
    
func hash(algorithm: ALGORITHM, data:Data) -> Data? {        
    let algos = ["MD2": (CC_MD2, CC_MD2_DIGEST_LENGTH),
                 "MD4": (CC_MD4, CC_MD4_DIGEST_LENGTH),
                 "MD5": (CC_MD5, CC_MD5_DIGEST_LENGTH),
                 "SHA1": (CC_SHA1, CC_SHA1_DIGEST_LENGTH),
                 "SHA224": (CC_SHA224, CC_SHA224_DIGEST_LENGTH),
                 "SHA256": (CC_SHA256, CC_SHA256_DIGEST_LENGTH),
                 "SHA384": (CC_SHA384, CC_SHA384_DIGEST_LENGTH),
                 "SHA512": (CC_SHA512, CC_SHA512_DIGEST_LENGTH)]

	guard let (hashAlgorithm, length) = algos[algorithm.rawValue]  else { return nil }
	var hashData = Data(count: Int(length))
       
	// Swift > 5.0
	hashData.withUnsafeMutableBytes { (digestBytes) in
		let digest = digestBytes.bindMemory(to: UInt8.self).baseAddress
		data.withUnsafeBytes { messageBytes in
			let message = messageBytes.baseAddress    
			_ = hashAlgorithm(message, CC_LONG(data.count), digest)
		}
	}
        
	return hashData
}

func hash(algorithm: ALGORITHM, string:String) -> Data? {
	let data = string.data(using:.utf8)!
	return hash(algorithm: algorithm, data: data)
}

 

[사용방법]

let clearString = "clearData0123456"
let clearData   = clearString.data(using:.utf8)!
print("clearString: \(clearString)")
print("clearData: \(clearData as NSData)")

//String 값 SHA256 해시 생성
let hashSHA256 = hash(algorithm: .SHA256, string:clearString)
print("hashSHA256: \(hashSHA256! as NSData)")
        
//Data 값 MD5 해시 생성
let hashMD5 = hash(algorithm: .MD5, data:clearData)
print("hashMD5: \(hashMD5! as NSData)")

// Data -> HexEncodedString
let stringMD5 = hashMD5?.hexEncodedString()
print("\(stringMD5)")

// HexEncodedString -> Array
print("\(stringMD5?.bytes)")

'Swift > 문법' 카테고리의 다른 글

[SWIFT]Tuples  (0) 2023.07.25
[SWIFT]Array  (0) 2023.07.25
[SWIFT]String -> Data, Data -> String 변환  (0) 2023.07.20
[SWIFT]문자열 String 관련 함수들  (0) 2023.07.13
[SWIFT]enum 함수 파라메터 타입으로 사용하기  (0) 2023.07.05

+ Recent posts