Can golang code be encrypted?

Release: 2019-12-28 14:38:01
Original
3723 people have browsed it

Can golang code be encrypted?

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.

When different platforms and languages are connected for DES encryption and decryption, you need to know what encryption mode and filling method the other party uses:

Windows default is CBC mode, CryptSetKeyParam function, openssl The function name directly indicates

In Java, if Cipher.getInstance() is not filled in, the default is DES/ECB/PKCS5Padding

The default in C# is CBC mode, PKCS7Padding(PKCS5Padding)

Golang provides CBC mode by default, so for ECB mode, you need to write your own code

PKCS5Padding 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)] }
Copy after login

ECB encryption mode

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:] } ... }
Copy after login

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 concepts

PEM: 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-----
Copy after login

PKCS: This is a huge system, and different keys use different pkcs file format. For example, the private key uses pkcs8.

X.509: This is a public key infrastructure (pki), which usually corresponds to PKIX in the IETF.

Note:

The pem file generated using openssl (such as openssl genrsa -out rsa_private_key.pem 1024) conforms to the PEM format, with -----BEGIN RSA PRIVATE KEY-- ---Beginning, -----END RSA PRIVATE KEY-----End.

It can also be converted to pkcs8:

openssl pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt
Copy after login

After clarifying the above concepts and formats, it is relatively easy to write the public key and private key encryption and decryption methods corresponding to golang. The first is to Decode the pem file, then decode the corresponding password into a structure supported by golang, and then perform corresponding processing.

For private keys, you can perform the following operations to sign:

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) ...
Copy after login

For more golang knowledge, please pay attention to the

golang tutorialcolumn.

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!

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!