setminami
11/11/2016 - 8:45 AM

md5/sha1

md5/sha1

//
//  String+Crypto.swift
//  PasteboardShelf
//
//  Created by SetMinami on 2016/11/10.
//  Copyright © 2016年 setMinami Software Lab. All rights reserved.
//

import Foundation

extension String {
    internal func md5() -> String {
        let string = self
        let context = UnsafeMutablePointer<CC_MD5_CTX>.allocate(capacity: 1)
        var digest = Array<UInt8>(repeating:0, count:Int(CC_MD5_DIGEST_LENGTH))
        CC_MD5_Init(context)
        CC_MD5_Update(context, string, CC_LONG(string.lengthOfBytes(using: String.Encoding.utf8)))
        CC_MD5_Final(&digest, context)
        context.deallocate(capacity: 1)
        var hexString = ""
        for byte in digest {
            hexString += String(format:"%02x", byte)
        }
        
        return hexString
    }
    
    internal func sha1() -> String {
        let str = self.cString(using: String.Encoding.utf8)
        let strLen = CC_LONG(self.lengthOfBytes(using: String.Encoding.utf8))
        let digestLen = Int(CC_SHA1_DIGEST_LENGTH)
        let result = UnsafeMutablePointer<CUnsignedChar>.allocate(capacity: digestLen)
        
        CC_SHA1(str!, strLen, result)
        
        let hash = NSMutableString()
        for i in 0..<digestLen {
            hash.appendFormat("%02x", result[i])
        }
        result.deinitialize()
        
        return String(hash)
    }
}
//
//  Bridging-Header.h
//  PasteboardShelf
//
//  Created by SetMinami on 2016/11/10.
//  Copyright © 2016年 setMinami Software Lab. All rights reserved.
//

#ifndef Bridging_Header_h
#define Bridging_Header_h

#import <CommonCrypto/CommonCrypto.h>

#endif /* Bridging_Header_h */