Copyright (c) 2017 Nikolai Ruhe.
SwiftDigest is released under the MIT License.
This is a pure Swift implementation of the MD5 algorithm. I might add more algorithms in the future. Or not.
The main purpose is to provide hashing through a pure Swift framework without dependencies other than Swift Foundation. Currently no effort has been taken to optimze the performance. When hashing more than a couple of kilo bytes it might be better to use Apple's CommonCrypto implementation.
Hash some Data
:
let data = Data()
let digest = data.md5
print("md5: \(digest)")
// prints: "md5: d41d8cd98f00b204e9800998ecf8427e"
Hash String
contents:
let input = "The quick brown fox jumps over the lazy dog"
let digest = input.utf8.md5
print("md5: \(digest)")
// prints: "md5: 9e107d9d372bb6826bd81d3542a419d6"
Hash the main executable:
let appID = try! Data(contentsOf: Bundle.main.executableURL!).md5
// can be used to send a unique id of the app version to a server or so.
The MD5Digest
type is ...
Hashable
, so it can be used as a key in dictionariesRawRepresentable
to convert to and from string representationsCustomStringConvertible
to make printing easyCodable
to enable JSON and Plist coding of types containing a digest property
/// Represents a 16 byte digest value, created from hashing arbitrary data.
public struct MD5Digest : Hashable, RawRepresentable, CustomStringConvertible, Codable {
/// Perform hashing of the supplied data.
public init(from input: Data)
/// Create a digest from reading a hex representation from the supplied string.
public init?(rawValue: String)
/// The 32 digit hex representation.
public var rawValue: String { get }
/// The 32 digit hex representation.
public var description: String { get }
/// The raw bytes of the digest value, always exactly 16 bytes.
public var data: Data { get }
/// The raw bytes of the digest value as a tuple.
public var bytes: (UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8) { get }
}
public extension Data {
/// Computes md5 digest value of the contained bytes.
public var md5: MD5Digest { get }
}
public extension String.UTF8View {
/// Computes md5 digest value of the string's UTF-8 representation.
public var md5: MD5Digest { get }
}