-
-
Save janeshsutharios/26f15f66b3ba2bdb9fef26ee6387dda2 to your computer and use it in GitHub Desktop.
Obfuscation of hard-coded security-sensitive strings.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// | |
// Obfuscator.swift | |
// | |
// Created by Dejan Atanasov on 2017-05-31. | |
// | |
import Foundation | |
class Obfuscator: AnyObject { | |
// MARK: - Variables | |
/// The salt used to obfuscate and reveal the string. | |
private var salt: String = "" | |
// MARK: - Initialization | |
init(withSalt salt: [AnyObject]) { | |
self.salt = salt.description | |
} | |
// MARK: - Instance Methods | |
/** | |
This method obfuscates the string passed in using the salt | |
that was used when the Obfuscator was initialized. | |
- parameter string: the string to obfuscate | |
- returns: the obfuscated string in a byte array | |
*/ | |
func bytesByObfuscatingString(string: String) -> [UInt8] { | |
let text = [UInt8](string.utf8) | |
let cipher = [UInt8](self.salt.utf8) | |
let length = cipher.count | |
var encrypted = [UInt8]() | |
for t in text.enumerated() { | |
encrypted.append(t.element ^ cipher[t.offset % length]) | |
} | |
#if DEVELOPMENT | |
print("Salt used: \(self.salt)\n") | |
print("Swift Code:\n************") | |
print("// Original \"\(string)\"") | |
print("let key: [UInt8] = \(encrypted)\n") | |
#endif | |
return encrypted | |
} | |
/** | |
This method reveals the original string from the obfuscated | |
byte array passed in. The salt must be the same as the one | |
used to encrypt it in the first place. | |
- parameter key: the byte array to reveal | |
- returns: the original string | |
*/ | |
func reveal(key: [UInt8]) -> String { | |
let cipher = [UInt8](self.salt.utf8) | |
let length = cipher.count | |
var decrypted = [UInt8]() | |
for k in key.enumerated() { | |
decrypted.append(k.element ^ cipher[k.offset % length]) | |
} | |
return String(bytes: decrypted, encoding: .utf8)! | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment