-
Star
(143)
You must be signed in to star a gist -
Fork
(19)
You must be signed in to fork a gist
-
-
Save DejanEnspyra/80e259e3c9adf5e46632631b49cd1007 to your computer and use it in GitHub Desktop.
// | |
// 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)! | |
} | |
} |
Dear Dejan Enspyra,
Can you let me know if your codes follows APACHE license or not?
I would like to use your source code.
Swift 4.2
if you are using swift 4.2, you should replace AnyObject
with Any
in line 19 like this:
init(withSalt salt: [Any]) { self.salt = salt.description }
What license does this code have?
Question for steps 2 and 3, is it equally safe to replace with the following code ?
enum ObfuscatedConstants {
static let obfuscatedString = Obfuscator().reveal(key: [34, 17, 93, 37, 21, 28, 72, 23, 20, 22, 72, 127, 98, 123, 87, 94, 92, 83, 76, 113])
}
GADMobileAds.configure(withApplicationID: ObfuscatedConstants.obfuscatedString)
You can use: https://github.com/pjebs/Obfuscator-iOS
@thexande Don't you give a chance to init Obfuscator with an arbitrary salt (classes)?
This really helped thanks a ton!!!!
You can try: https://github.com/520coding/confuse
Swift 4 Implementation
I might be missing something massive, but here is the Swift 4 implementation. Classes cannot conform to
AnyObject
in swift 4, so I standardized the initialization with a convenience init. @DejanEnspyra please correct me if I am wrong:Usage
func bytesByObfuscatingString(string: String) -> [UInt8]
enum
to prevent init):