Bu sorunun biraz eski olduğunu biliyorum, ancak yakın zamanda PIC16 ve 8051 üzerine AES128 uygularken kendim araştırmak zorunda kaldım ve bu soruyu da merak ediyordum.
Bunun gibi bir şey kullandım: http://cs.ucsb.edu/~koc/cs178/projects/JT/aes.c
ve ram kullanımım birkaç yüz bayt ve ikili boyut 3kb ROM'dan az.
En iyi tavsiyem http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation Wikipedia sayfasını okumak
ve farklı modları anlamak, örneğin OFB modundaki AES'in ECB modunu temel bir yapı taşı olarak nasıl kullandığını anlamak. Ayrıca XOR'ing (OFB modunda) onu simetrik bir işlem yapar, bu yüzden şifrelemek / şifre çözme aynı zamanda yerden tasarruf sağlayan işlevdir.
AES'in gerçekte nasıl çalıştığını anladığımda, onu C'de uygulayabilir ve sonra NIST belirtimine karşı test edebilirim ** (bunu yapın! Çevrimiçi olarak bulunan kodun çoğu hatalı) ve yalnızca kesinlikle ihtiyacım olanı uygular.
Bu özelleştirme ve optimizasyonu yaparak AES128'i 8051 üzerine diğer bazı RF ürün yazılımlarıyla birlikte kullanabildim. RAM kullanımı (tüm sistem için) ~ 2.5kb'dan 2kb'ın altına düşmüştür, yani 4kb SRAM ile 8051'e yükseltmek zorunda değiliz, ancak daha ucuz 2kb SRAM sürümünü kullanmaya devam edebiliriz.
** Test Vektörleri, Ek F'da yer almaktadır: http://csrc.nist.gov/publications/nistpubs/800-38a/addendum-to-nist_sp800-38A.pdf
DÜZENLE:
Sonunda Github kodunu aldım: https://github.com/kokke/tiny-AES-c
Boyutu için biraz optimize ettim. ARM için derlendiğinde GCC boyut çıktısı:
$ arm-none-eabi-gcc -O2 -c aes.c -o aes.o
$ size aes.o
text data bss dec hex filename
1024 0 204 1228 4cc aes.o
Yani kaynak kullanımı şimdi 1KB kod, 204 bayt RAM.
PIC için nasıl oluşturulacağını hatırlamıyorum, ancak 8bit AVR Atmel Mega16, PIC gibi bir şeyse, kaynak kullanımı:
$ avr-gcc -Wall -Wextra -mmcu=atmega16 -O2 -c aes.c -o aes.o
$ avr-size aes.o
text data bss dec hex filename
1553 0 198 1751 6d7 aes.o
Yani 1.5K kodu ve 198 bayt RAM.