Vì vậy, tôi đã tạo ra một struct JSONEncoder
như sau:
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)
}
}
Để thiết lập bạn cần thêm một tệp JSONFile.json
chứa JSON bạn muốn mã hóa. Thêm nó để sao chép tài nguyên bó. Lặp lại điều này cho tệp văn bản mã hóa JSONCipher.txt
. Đảm bảo tệp này không chứa dấu giọng nói, vì điều này mang đến lỗi và đủ lớn để mã hóa JSON. Đừng làm cho nó quá lớn nếu không bạn sẽ nhận được một cảnh báo bộ nhớ.
Bạn có thể chơi xung quanh với điều này, để mã hóa một tập tin JSON với XOR, sử dụng
JSONEncoder.JSONFileToString()
JSONEncoder.encodeJSON()
này sau đó sẽ in ra cửa sổ Console, và bạn có thể sao chép mã này vào một tập tin txt kèm theo khuôn khổ của bạn.
Đối với giải mã tập tin này, bạn có thể kiểm tra như sau:
JSONEncoder.decodeJSON()
(uncommenting tuyên bố print
trong decodeJSON
trong JSONEncoder
struct, có thể kiểm tra các công trình này)
Nếu tệp JSON của bạn quá lớn cho chương trình này, bạn thực sự có thể sử dụng công cụ này: https://www.browserling.com/tools/xor-encrypt và XOR Decrypter tương tự trên cùng một tên miền. Sau đó, bạn có thể sử dụng đầu ra từ bộ mã hóa này để thêm tệp JSON được mã hóa vào khung của bạn. Chỉ cần chắc chắn rằng bạn sử dụng cùng một phím khi bạn giải mã các json!
Lưu ý rằng điều này lưu trữ tệp văn bản của bạn trong dự án thực tế: điều này có khả năng không an toàn. Có thể lưu trữ tệp JSONCipher.txt
trên máy chủ và tìm nạp tệp đó bằng mã thông báo truy cập được xác thực. Mã tôi đã cung cấp có thể được sửa đổi để cho phép điều này.
Tôi hy vọng điều này đã chỉ cho bạn đúng hướng để giải mã mã.
Đặt tệp đó vào tệp nhưng được mã hóa, ví dụ: sử dụng mã hóa xor. Nó sẽ không thể đọc được cho người dùng ngẫu nhiên nữa – Sulthan
@Sulthan bạn có thể giải thích điều này thêm một chút không? Những loại tập tin và làm thế nào tôi có thể mã hóa/giải mã này? – swalkner
Những gì bạn muốn là obfuscation. Có hàng nghìn phương pháp để làm xáo trộn dữ liệu. Bạn thậm chí có thể mã hóa nó và đặt khóa mã hóa vào mã của bạn. Sẽ không ngăn ai đó thực sự muốn đọc dữ liệu và biết cách dịch ngược nhưng nó sẽ ngăn người dùng tò mò ngẫu nhiên. – Sulthan