การเติม PKCS#7 ถูกกำหนดไว้ใน rfc5652#section-6.3
อัลกอริธึมการเข้ารหัสเนื้อหาบางตัวถือว่าความยาวของอินพุตคือ a
หลายตัวของ k octets โดยที่ k มากกว่าหนึ่ง สำหรับการดังกล่าว
อัลกอริทึม อินพุตจะถูกเสริมที่ส่วนท้ายด้วย
k-(lth mod k) octets ทั้งหมดที่มีค่า k-(lth mod k) โดยที่ lth คือ
ความยาวของอินพุต กล่าวอีกนัยหนึ่ง อินพุตถูกเสริมที่
ต่อท้ายด้วยหนึ่งในสตริงต่อไปนี้:
01 -- ถ้า lth mod k = k-1
02 02 -- ถ้า lth mod k = k-2
.
.
.
k k ... k k -- ถ้า lth mod k = 0
อย่างที่เราเห็น ไบต์การเติมสามารถมีชุดของ01,02,...,
หรือ,16
สำหรับการเข้ารหัสบล็อกขนาด 16 ไบต์ ในขณะที่อ่าน
เคยเห็นเค้ายกตัวอย่างว่า
บล็อกที่สองประกอบด้วย HMAC 9 ไบต์ที่เหลือและ 7
ไบต์ของการเติม 0x06
โปรดดูรูปที่ 1 โปรดทราบว่าตัวเข้ารหัสยังสามารถเลือกการเติมที่ยาวขึ้นและต่อท้ายด้วย 23, 39, ...หรือ 247 ไบต์การเติม (ในขณะที่ตั้งค่าของไบต์การเติมตามนั้น)
นี่ไม่ใช่การเติม PKCS#7 ดังนั้นฉันจึงดูที่ TLS 1.2 อาร์เอฟซี 5246 และเห็นเป็นรูปแบบเดียวกันเกือบทั้งหมด
หากความยาวช่องว่างภายในจำเป็นขั้นต่ำ 6 ช่องว่างภายในจะเป็น 6
ไบต์ ซึ่งแต่ละค่ามีค่า 6 ดังนั้น 8 ออกเต็ตสุดท้ายของ
GenericBlockCipher ก่อนที่การเข้ารหัสบล็อกจะเป็น xx 06 06 06 06 06
06 06 โดยที่ xx คือออคเต็ตสุดท้ายของ MAC
เพื่อให้เข้ากันได้กับการเติม PKCS#7 ข้อมูลด้านบนควรเป็น ( ไม่เห็น an ผิดพลาด)
หากความยาวช่องว่างภายในจำเป็นขั้นต่ำ 7 ช่องว่างภายในจะเป็น 7
ไบต์ ซึ่งแต่ละค่ามีค่าเป็น 7 ดังนั้น 8 ออกเต็ตสุดท้ายของ
GenericBlockCipher ก่อนที่การเข้ารหัสบล็อกจะเป็น xx 07 07 07 07 07
07 07 โดยที่ xx คือออคเต็ตสุดท้ายของ MAC
และบทความก็มีข้อผิดพลาดเช่นกัน
เท่าที่ฉันรู้ แหล่งข้อมูลทั้งสองนี้ไม่ถูกต้อง มีบางอย่างที่ฉันพลาดไปเกี่ยวกับการออกแบบ/การใช้งานที่แตกต่างกันของกฎการเติม PKCS#7 หรือไม่