ฉันมีโซลูชัน C# ที่เข้ารหัสข้อมูลขนาดเล็กจำนวนมากโดยใช้ AES
// นี่คือวิธีที่ฉันกำหนดค่าวัตถุ Aes
var aes = Aes สร้าง ();
aes.Mode = CipherMode.CBC;
aes.KeySize = 256;
aes.Padding = PaddingMode.PKCS7;
จากนั้นฉันเขียนไบต์ไซเฟอร์เท็กซ์ดิบไปยังคอลัมน์ SQL Server VARBINARY
การสอบถามความยาวของคอลัมน์ข้อความรหัส VARBINARY เหล่านี้ฉันคาดว่ามันจะเป็นผลคูณของ 16 ไบต์เสมอ อย่างไรก็ตามนั่นดูเหมือนจะไม่เป็นเช่นนั้นที่นี่
ฉันพยายามอ่านเกี่ยวกับเรื่องนี้ทางออนไลน์และคำถามเดียวที่ฉันพบคือถามว่าทำไม AES ciphertext ถึงบุดมากถึง 16 บล็อกไบต์ ดังนั้นฉันคิดว่าฉันจะถามเกี่ยวกับคำถามผกผันที่นี่
หมายเหตุ:
- ฉันทดสอบการถอดรหัสหนึ่งในข้อความเข้ารหัสที่มีขนาดผิดปกติเหล่านี้ และมันก็ใช้ได้ดี ดังนั้นข้อความเข้ารหัสจึงไม่ผิดรูปแบบ
- ฉันสังเกตเห็นว่ามันไม่ได้เกิดขึ้นบ่อยๆ ในรอบเดียวมันเกิดขึ้น 19 ครั้งจาก 5,828 ครั้ง
- เมื่อมันเกิดขึ้น มันจะออกทีละหนึ่งเสมอ (31 แทนที่จะเป็น 32, 767 แทนที่จะเป็น 768 ฯลฯ..)
ฉันมีความคิดว่าบางทีมาตรฐาน AES อาจตัดทอน cipher-bytes ที่เป็นศูนย์ (หรือตัวเลขอื่น ๆ ที่รู้จักกันดี) จากจุดสิ้นสุดของเอาต์พุตเนื่องจากตัวถอดรหัสสามารถสร้างใหม่ได้ แต่ชอบการชี้แจง