2012-06-14 53 views
6

Tôi cố gắng để đọc từ một tập tin và mã hóa dữ liệu AES sử dụng trong chế độ CFB không có đệmmã hóa AES cắt văn bản trong chế độ CFB

'AES/CFB/NoPadding'. IV dài 16bytes.

Cho rằng AES theo mặc định, hoạt động với 16 byte khối, tôi đã nghĩ đến việc sử dụng lược đồ đệm nếu tôi đang sử dụng CBC hoặc bất kỳ chế độ nào khác nhưng CFB. CFB về cơ bản không yêu cầu đệm cho chữ thô.

Vì vậy, vấn đề là nếu tệp của tôi chứa dữ liệu nhỏ hơn 16 byte thì không có gì được mã hóa. Nếu nó lớn hơn 16 byte, thì chỉ 16 byte đầu tiên mới được mã hóa.

Điều này cho biết rõ ràng rằng kích thước khối đang khởi động và nếu có dòng chảy hoặc tràn byte w.r.t. kích thước khối, sau đó dữ liệu/byte bị loại bỏ.

Điều tôi không hiểu là khi sử dụng CFB, tôi không cần phải đệm dữ liệu .. đúng! Vậy tại sao kích thước khối mặc định 16byte của AES lại hoạt động và cắt bớt dữ liệu?

+1

Đăng mã bạn đang sử dụng để mã hóa. – Robert

Trả lời

4

Bạn đã không chỉ định số lượng bit bạn muốn phản hồi cho chế độ đó và do đó bạn nhận được 128 bit mặc định. Có vẻ như bạn muốn 8 bit, bạn nên sử dụng đối số sau đây để getInstance():

Cipher.getInstance("AES/CFB8/NoPadding"); 
Các vấn đề liên quan