2010-01-21 3 views

cevap

4

documentation baktığımızda, veri kendinizi pad, sana bağlı kütüphane kullanıcı var gibi görünüyor. Belgeleme, AES için blok boyutunun her zaman 16 bayt olduğunu ve bu nedenle verileri 16 baytlık bir katına kaydırmanız gerektiğini belirtir.

Dolgu nasıl yapılır, verilerin türüne bağlıdır. Dizeler için en iyi yaklaşım muhtemelen dizeyi belirli bir kodlamaya kodlamak ve daha sonra bu kodlamanın uzunluğunu almaktır. Tüm karakterleri güvenerek değiliz Böylece bir 8-bitlik kod noktasıyla temsil edilir: Eğer veri bayt bir dizidir olduğunuzda

plaintext = data.encode('utf-8') 
l = len(plaintext) 
ciphertext = cipher.encrypt(plaintext + ((16 - len%16) * PADDING_BYTE)) 

Benzer bir yaklaşım çalışacaktır.

0PADDING_BYTE kadar iyi çalışmalıdır, ancak verilerin şifresini çözerken dolguyu kaldırmaya dikkat etmeniz gerekir. Şifreli metin içindeki verilerin uzunluğu, örn. Şifrelemeden önce verilerin uzunluğunu düz metin kutusuna yerleştirin, ancak daha sonra dolgu malzemesinin doğru şekilde üretildiğinden emin olmak için bazı çemberler boyunca atlamanız gerekir.

Edit: oh evet, yalnızca RFC gibi GregS bağlantıları gibi, uzunluk sorununu işlemenin standart yolu, dolgu baytının dolgusunun uzunluğunu kullanmaktır. Yani dolgu baytının 6 baytına ihtiyacınız varsa, dolgu baytı 0x06'dur. Herhangi bir dolguya ihtiyacınız yoksa, mesajı doğru bir şekilde kurtarabilmeniz için tüm dolgu bloğu baytını (16 baytlık 0xa0) eklemeniz gerektiğini unutmayın.

3

PKCS-5, bölüm 6.1.1 4. adımda belirtilen şema gibi standart bir dolgu şemasını kullanın (bu örnekte 8'i AES kullanıyorsanız 16 ile değiştirin).

İlgili konular