單元測試覆蓋所以我創建了一個JSONEncoder
結構如下:
public struct JSONEncoder {
private static var JSON = ""
public static var JSONData = [UInt8]()
private static var cipher = [UInt8]()
public static var encryptedJSONData = [UInt8]()
public static var decryptedJSONData = [UInt8]()
private static var decryptedJSON = ""
public static func JSONFileToString() {
guard let JSONFilePath = Bundle.main.url(forResource: "JSONFile", withExtension:"json"), let cipherFilePath = Bundle.main.url(forResource: "JSONCipher", withExtension:"txt") else {
return
}
do {
let text = try String(contentsOf: cipherFilePath, encoding: String.Encoding.utf8)
cipher = [UInt8](text.utf8)
let data = try Data(contentsOf:JSONFilePath)
if let JSON = String(data: data, encoding: String.Encoding.utf8) {
self.JSON = JSON
JSONData = [UInt8](JSON.utf8)
//print("data read: \(JSON)")
} else {
print("Data to string conversion failed")
}
} catch {
print(error.localizedDescription)
}
}
public static func encodeJSON() {
// encrypt bytes
for t in JSONData.enumerated() {
encryptedJSONData.append(t.element^cipher[t.offset])
}
print(encryptedJSONData)
}
public static func decodeJSON() {
for t in encryptedJSONData.enumerated() {
decryptedJSONData.append(t.element^cipher[t.offset])
}
decryptedJSON = String(bytes: decryptedJSONData, encoding: String.Encoding.utf8)!
//print(decryptedJSON)
}
}
要這樣設置你需要添加一個包含要編碼的JSON的JSONFile.json
文件。將其添加到複製束資源。對密文文件JSONCipher.txt
重複此操作。確保這個文件不包含語音標記,因爲這會帶來錯誤,並且它足夠大以至於不能編碼JSON。不要讓它太大,否則你會得到記憶警告。
你可以玩這個,編碼與XOR一個JSON文件,使用
JSONEncoder.JSONFileToString()
JSONEncoder.encodeJSON()
然後,這將打印到控制檯,您可以將此代碼複製到連接到您的架構一個txt文件。
用於解密該文件,你可以測試如下:
JSONEncoder.decodeJSON()
(在JSONEncoder
結構取消對print
聲明decodeJSON
,可以測試這個工程)
如果你的JSON文件過大對於這個程序,你可以使用這個工具:https://www.browserling.com/tools/xor-encrypt,以及相同域中的類似XOR Decrypter。然後,您可以使用此編碼器的輸出將加密的JSON文件添加到您的框架。只要確保在解碼json時使用相同的密鑰!
請注意,這會將您的文本文件存儲在實際項目中:這可能不安全。可能將JSONCipher.txt
文件存放在服務器上,並使用經過身份驗證的訪問令牌獲取該文件。我提供的代碼可以修改以適應此。
我希望這已經指出你的代碼混淆的正確方向。
把它放到一個文件,但編碼,例如使用XOR編碼。它不會被隨機用戶閱讀 – Sulthan
@Sulthan你能解釋一下這一點嗎?什麼樣的文件,我如何編碼/解碼呢? – swalkner
你想要的是混淆。有數千種混淆數據的方法。您甚至可以對其進行加密並將加密密鑰放入您的代碼中。也不會阻止真正想要讀取數據並知道如何反編譯的人,但會阻止隨機好奇的用戶。 – Sulthan