Maison >développement back-end >Golang >Le code Golang peut-il être crypté ?
Méthode de cryptage du code Golang :
Cryptage et décryptage DES
bibliothèque standard crypto/des en golang Là est une implémentation de DES, mais la description de la bibliothèque golang est relativement simple. Si vous n'êtes pas familier avec les règles de cryptage de DES, il n'est pas facile d'écrire le code correspondant. Il est également facile de se tromper lors du cryptage et du chiffrement. décryptage entre différentes langues avec un tiers , une erreur s'est produite.
Golang fournit le mode CBC par défaut, donc pour le mode ECB, vous devez écrire votre propre codePKCS5Padding et PKCS5Unpadding
func PKCS5Padding(ciphertext []byte, blockSize int) []byte { padding := blockSize - len(ciphertext)%blockSize padtext := bytes.Repeat([]byte{byte(padding)}, padding) return append(ciphertext, padtext...) } func PKCS5Unpadding(origData []byte) []byte { length := len(origData) unpadding := int(origData[length-1]) return origData[:(length - unpadding)] }Mode de cryptage ECB
block, err := des.NewCipher(key) if err != nil { ... } bs := block.BlockSize() src = PKCS5Padding(src, bs) if len(src)%bs != 0 { .... } out := make([]byte, len(src)) dst := out for len(src) > 0 { block.Encrypt(dst, src[:bs]) src = src[bs:] dst = dst[bs:] } ... }
Chiffrement et décryptage RSA
Différent des autres langages qui ont une encapsulation plus avancée par défaut, golang doit être combiné et encapsulé selon différents conceptsPEM : se termine généralement par .pem. Les fichiers sont couramment utilisés dans les systèmes de stockage de clés et de certificats X.509. Voici le format PEM sous un certificat X509 :-----BEGIN CERTIFICATE----- base64 -----END CERTIFICATE-----PKCS : il s'agit d'un système énorme et différent. les clés utilisent un format de fichier pkcs différent. Par exemple, la clé privée utilise pkcs8. X.509 : Il s'agit d'une infrastructure à clé publique (pki), qui correspond généralement au PKIX dans l'IETF. Remarque : Le fichier pem généré à l'aide d'openssl (tel que openssl genrsa -out rsa_private_key.pem 1024) est conforme au format PEM, avec -----BEGIN RSA PRIVATE KEY-- ---Début, -----FIN CLÉ PRIVÉE RSA-----Fin. peut également être converti en pkcs8 :
openssl pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocryptAprès avoir clarifié les concepts et les formats ci-dessus, il est relativement facile d'écrire les méthodes de cryptage et de déchiffrement à clé publique et à clé privée correspondant à golang Le premier. consiste à décoder le fichier pem, puis à décoder le mot de passe correspondant dans une structure prise en charge par golang, puis à effectuer le traitement correspondant. Pour les clés privées, vous pouvez effectuer les opérations suivantes pour signer :
block, _ := pem.Decode([]byte(key)) if block == nil { // 失败情况 .... } private, err := x509.ParsePKCS8PrivateKey(block.Bytes) if err != nil { ... } h := crypto.Hash.New(crypto.SHA1) h.Write(data) hashed := h.Sum(nil) // 进行rsa加密签名 signedData, err := rsa.SignPKCS1v15(rand.Reader, private.(*rsa.PrivateKey), crypto.SHA1, hashed) ...Pour plus de connaissances sur Golang, veuillez faire attention à la colonne
tutoriel golang.
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!