Bạn có hai lựa chọn (và ở đây tôi mô tả quá trình mã hóa mà thôi, nhưng giải mã tương tự):
Sử dụng một mật mã dòng (như AES-CTR)
Bạn khởi tạo mật mã với một Phím 16 byte và thực sự ngẫu nhiên 16 byte nonce, viết nonce, tải phần đầu tiên, mã hóa nó, viết kết quả, tải một mảnh thứ hai và vv. Lưu ý rằng bạn phải khởi tạo mật mã chỉ một lần. Kích thước của mảnh có thể tùy ý; nó thậm chí không cần phải giống nhau mỗi lần.
Sử dụng một thuật toán mã hóa khối với một chế độ chaining một vượt qua, ví dụ AES128-CBC
Bạn khởi tạo mật mã với khóa gồm 16 byte, tạo ra một ngẫu nhiên 16 byte IV, viết IV, viết tổng số chiều dài của tập tin, tải phần đầu tiên, mã hóa nó cùng với IV, ghi kết quả, tải một mảnh thứ hai, mã hóa bằng cách sử dụng 16 byte cuối cùng của khối mã hóa trước đó dưới dạng IV, ghi kết quả, v.v. Kích thước của mảnh phải là bội số của 16 byte; một lần nữa, nó thậm chí không cần phải giống nhau mỗi lần. Bạn có thể cần phải pad khối cuối cùng với số không.
Trong cả hai trường hợp
Bạn phải tính toán băm mật mã của file được mã hóa ban đầu (ví dụ sử dụng SHA-256) và viết nó khi mã hóa được hoàn tất. Điều đó khá dễ dàng: bạn khởi tạo băm ngay từ đầu, và nạp mỗi khối vào nó ngay sau khi nó được nạp (bao gồm nonce/IV và có thể là trường độ dài). Ở phía giải mã, bạn cũng làm như vậy. Cuối cùng, bạn phải xác minh rằng thông tin được tính toán phù hợp với thông tin đi kèm với tệp được mã hóa.
Làm cách nào để thực hiện trên iOS? Tôi sợ tôi không quen với nền tảng này, nhưng CCCypt dường như phù hợp với hóa đơn.
CHỈNH SỬA: nonce/IV và độ dài cũng được băm.
Tại sao không chia nhỏ dữ liệu trước khi mã hóa, sau đó không mã hóa và đặt lại với nhau? –
@PRNDLDevelopmentStudios Có, tôi cho rằng tôi sẽ làm điều đó nếu tôi phải làm, nhưng tôi có nhiều tệp lớn và sẽ khó quản lý một loạt các tệp được chia nhỏ hơn. – Kyle
Bạn có thể thử nén dữ liệu trước khi mã hóa, nhưng tôi không biết liệu tỷ lệ nén có đủ cao để thực sự quan trọng hay không. Có thể mở kết nối SSL đến máy chủ, tải lên dữ liệu đã mã hóa, giải mã máy chủ và gửi lại? –