Golang code encryption method:
DES encryption and decryption
The standard library in golang is in crypto/des There is an implementation of DES, but the description of the golang library is relatively simple. If you are not familiar with the encryption rules of DES, it is not easy to write the corresponding code. It is also easy to get confused when performing encryption and decryption between different languages with a third party. ,An error occurred.
Golang provides CBC mode by default, so for ECB mode, you need to write your own codePKCS5Padding and 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)] }
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:] } ... }
RSA Encryption and decryption
Different from other languages that have higher-level encapsulation by default, golang needs to be combined and encapsulated based on different conceptsPEM: usually ends with .pem Files are commonly used in key storage and X.509 certificate systems. The following is the PEM format under an X509 certificate:-----BEGIN CERTIFICATE----- base64 -----END CERTIFICATE-----
openssl pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt
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) ...
golang tutorial column.
The above is the detailed content of Can golang code be encrypted?. For more information, please follow other related articles on the PHP Chinese website!