Đối với một lời giải thích rất toàn diện về vấn đề này bao gồm các nội dung của PKCS # 5 và PKCS # 7 tiêu chuẩn mật mã, xin vui lòng hãy xem here.
Đệm PKCS # 5 có nghĩa là đệm 1 đến 8 byte. Bản thân các byte đệm chứa số byte đệm được mã hóa thành một byte. Lớp đệm PKCS # 5 được chỉ định cho DES, nhưng nó sẽ phù hợp với bất kỳ mật mã khối nào có kích thước khối là 8 byte.
Bây giờ, các đặc tả DES và thậm chí đặc tả PKCS # 5 cho mã hóa dựa trên mật khẩu trước và Java trong một thời gian khá dài. AES chỉ được tiêu chuẩn hóa vào năm 2002, lâu sau khi Java và thậm chí cả Java 2 được giới thiệu. Vì vậy, (ba) DES và PKCS # 5 đệm được tích hợp vào Java trước khi AES xuất hiện.
Khi Java - hoặc chính xác hơn, nhà cung cấp Sun JCE - đã đạt được chức năng AES, nó yêu cầu phương pháp đệm cho kích thước khối là 16 byte. PKCS # 7 chỉ định phương thức đệm này là is identical to PKCS#5 padding, ngoại trừ việc nó được xác định cho kích thước khối từ 2 đến 255 byte (giá trị tối đa của một byte nếu nó mã hóa một số nguyên không dấu). Tuy nhiên, phương pháp padding đã có; nó được đặt tên là "PKCS5Padding"
. Vì vậy, thay vì giới thiệu một tên mới, "PKCS5Padding"
chỉ đơn giản là được sử dụng lại.
Hiện giờ nhà cung cấp Sun thực sự cần hỗ trợ "PKCS7Padding"
vì đệm PKCS # 5 đơn giản là không chính xác. Nó không chỉ là một vấn đề đặt tên Java, nó là một vấn đề cho bất kỳ nhà phát triển nào cố gắng thực hiện các giao thức mã hóa hoặc các ứng dụng cổng khác tới Java. Tuy nhiên, bây giờ, bạn nên sử dụng "PKCS5Padding"
thay vì "PKCS7Padding"
.
Nguồn
2015-01-24 22:39:08
Lưu ý rằng ECB không phải là CPA an toàn, thay vào đó hãy sử dụng CBC (nếu bạn chỉ muốn bảo mật dữ liệu được lưu trữ). –