Maison >développement back-end >Golang >Pourquoi les implémentations My Go et PyCrypto AES-CFB produisent-elles des textes chiffrés différents ?
Différents résultats en Go et Pycrypto avec AES-CFB
Cette question découle de la nécessité d'intégrer une application Go dans une base de code Python existante qui utilise PyCrypto pour le cryptage. Le problème se manifeste lorsque les implémentations Python et Go du cryptage AES-CFB produisent des textes chiffrés différents.
Exemple Python :
cipher = Crypto.Cipher.AES.new( key=password, mode=Crypto.Cipher.AES.MODE_CFB, IV=iv)
Échantillon Go :
aesBlock, err4 := aes.NewCipher(password) cfbDecrypter := cipher.NewCFBEncrypter(aesBlock, iv)
En Go, la fonction NewCFBEncrypter utilise des segments de 16 bits par défaut, tandis qu'en Python, PyCrypto utilise des segments de 8 bits (CFB8). Pour résoudre cet écart et permettre à Go de déchiffrer le texte chiffré à l'aide des paramètres PyCrypto, l'implémentation de Go doit être modifiée pour prendre en charge CFB8.
Solution :
La recherche révèle que Go's Le code source de CFBDecrypter et CFBEncrypter peut être facilement adapté pour prendre en charge CFB8. La modification implique de changer la taille du segment dans les lignes suivantes :
Code original :
func (f *cfb) XORKeyStream(dst, src []byte)
Code modifié :
func (f *cfb) XORKeyStream(dst, src []byte) { for i := 0; i < len(src); i += 1 { f.b[0] = f.b[0] << 8 | src[i] >> 8 f.b[1] = src[i] dst[i] = f.b[f.s] ^ f.update(f.b[0]^f.b[1]) } }
En implémentant cette modification, Go prendra en charge CFB8 et sera capable de déchiffrer le texte chiffré à l'aide de l'implémentation Python. paramètres.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!