Ответ 1
Итак, я создал структуру 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)
}
}
Чтобы установить это, вам нужно добавить файл JSONFile.json
, содержащий JSON, который вы хотите закодировать. Добавьте его, чтобы скопировать ресурсы пакета. Повторите это для текстового файла с расширением JSONCipher.txt
. Убедитесь, что этот файл не содержит речевых меток, так как это приводит к ошибкам и достаточно достаточно для кодирования JSON. Не делайте его слишком большим, так как в противном случае вы получите предупреждение о памяти.
Вы можете поиграть с этим, чтобы закодировать JSON файл с помощью XOR, используя
JSONEncoder.JSONFileToString()
JSONEncoder.encodeJSON()
Затем это будет напечатано на консоли, и вы можете скопировать этот код в файл txt, прикрепленный к вашей инфраструктуре.
Для дешифрования этого файла вы можете протестировать следующее:
JSONEncoder.decodeJSON()
(Раскомментируя оператор print
в decodeJSON
в структуре JSONEncoder
, можно проверить, как это работает)
Если ваш JSON файл слишком велик для этой программы, вы можете использовать этот инструмент: https://www.browserling.com/tools/xor-encrypt и аналогичный XOR Decrypter on тот же домен. Затем вы можете использовать вывод этого кодера для добавления зашифрованного файла JSON в свою инфраструктуру. Просто убедитесь, что вы используете тот же ключ, когда вы декодируете json!
Обратите внимание, что это сохраняет ваш текстовый файл в фактическом проекте: это потенциально небезопасно. Возможно, размещайте файл JSONCipher.txt
на сервере и извлекайте его с помощью токена аутентифицированного доступа. Код, который я предоставил, может быть изменен для этого.
Я надеюсь, что это указало вам в правильном направлении для обфускации кода.