AES(高级加密标准),是一种对称加密算法,由美国国家标准与技术研究院(NIST)于2001年发布,用于取代早期的DES加密算法,支持128位、192位和256位密钥长度,广泛应用于数据安全领域。

相比其他的对称加密如DES,由于DES密钥长度只有56位如今的算力甚至可以在5分钟内破解,而AES最高级别达到了256位密钥长度,如果采用穷举法,目前来看AES是一种”无法“被破解的加密存在。

不过在 Go 中通常需要使用crypto/aescrypto/cipher包实现AES加密解密。

这里推荐一个开源的AES加解密库,只需要一行代码即可快速完成加密或解密

该开源库托管于 Github : https://github.com/forgoer/openssl。并且这个库的和 PHP JAVA等主流语言的加密算法是一致的。

安装

这里使用go get安装这个依赖库:

go get -u github.com/forgoer/openssl

加密

加密采用安装级别也就是AES-ECB-256算法,只需要一行代码就可以实现:

package main

import (
    "encoding/base64"
    "fmt"
    "github.com/forgoer/openssl"
)

func main() {
    src := []byte("123456")
    key := []byte("12345678901234561234567890123456")
    dst, _ := openssl.AesECBEncrypt(src, key, openssl.PKCS7_PADDING)
    fmt.Println(base64.StdEncoding.EncodeToString(dst)) // x0h/7JbwjwWsiZMRoZvb9g==
}

注意AES-ECB-256需要加密的密钥的字符串长度为32位,也就是256bit位。并且这个示例输出是base64编码之后的字符串,如果是和别的语言对接,请注意编码方式。

解密

解密也很简单,也是只需要一行代码:

package main

import (
    "encoding/base64"
    "fmt"
    "github.com/forgoer/openssl"
)

func main() {
    key := []byte("12345678901234561234567890123456")
    data, _ := base64.StdEncoding.DecodeString("x0h/7JbwjwWsiZMRoZvb9g==")
    dst, _ := openssl.AesECBDecrypt(data, key, openssl.PKCS7_PADDING)
    fmt.Println(string(dst)) // 123456
}

最后

通过这个库,不需要太多的代码就可以方便地实现AES加解密了。同时,它还支持DES RSA等多种方式加解密。