Maison > développement back-end > Golang > Pourquoi les implémentations My Go et PyCrypto AES-CFB produisent-elles des textes chiffrés différents ?

Pourquoi les implémentations My Go et PyCrypto AES-CFB produisent-elles des textes chiffrés différents ?

Barbara Streisand
Libérer: 2024-12-11 14:55:10
original
617 Les gens l'ont consulté

Why Do My Go and PyCrypto AES-CFB Implementations Produce Different Ciphertexts?

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)
Copier après la connexion

Échantillon Go :

aesBlock, err4 := aes.NewCipher(password)
cfbDecrypter := cipher.NewCFBEncrypter(aesBlock, iv)
Copier après la connexion

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)
Copier après la connexion

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])
    }
}
Copier après la connexion

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!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal