假设QQ或微信或其他任何应用程序的开发人员可以精确地在其存储中查看您的消息。 所有您曾经共享,聊天和发送的数据。您希望这样吗?现在,全球范围内有一种趋势,即保持此数据加密。

什么是加密?

加密是一种将人类可理解的信息存储在非人类可理解的格式中的方法。

假设您发送了一条"Hello,Bryan!"消息。 在将其保存到数据库之前,该文本将被加密,因此将在其中存储一些随机字符,而不留下密码文本可能包含原始的"Hello,Bryan!"文本的线索。

在将其导出到另一个用户或仪表板之前,该信息将在数据库外进行解密,仅留下密码文本,而不重写原始文本。

为此,密钥必须保密,以便不会对所有人可见。 现在,所有云巨头都提供不同的密钥管理系统,例如AWS的KMS(密钥管理系统)。

桑鸟sangniao.com

由于为什么需要加密相当明显,因此让我们转向如何在GoLang和PHP中加密和解密。

注意:本文将考虑256位AES加密,这是最复杂且最难破解的。

在GoLang中加密和解密

TLDR;完整的代码可作为gist和代码段在本节末尾提供。*

1. 加密

您将需要一个32位密码秘钥和16位初始化向量iv:

考虑是否将它们存储为环境变量或从某处检索它们,这很重要不能硬编码

aes

首先,必须进行初始化:

NewCipher

然后,创建一个纯文本长度的字节数组并开始加密:

将结果转换为Base64编码:

您的文本现在已加密。确保具有第二个返回参数的错误以防需要记录它。再次,完整的代码(包括我们遇到的所有必需的If条件)如下所示,作为GitHub的gist提供:

2. 解密

不要忘记您的秘密和iv密钥。 首先,解码字符串:

aes.NewCipher

并进行解密:

PKCS5UnPadding

运行两个函数的结果如下:

完整的代码如下,也可在此Go playground中使用:

在GoLang中的AES加密和解密

在PHP中加密和解密

TLDR;完整的代码可作为gist在本节末尾提供。_

1.加密

OPENSSL_RAW_DATAOPENSSL_ZERO_PADDING

因此,请设置您的密钥和iv:

(再次注意,它们在此处硬编码以便更好地可视化,通常需要将它们存储在键管理服务中)

openssl_encrypt

2.解密

openssl_decryptopenssl_encrypt

结果如下:

它与在GoLang中编写的相同,因此可以在将Go保存和加密的数据转换为PHP或反之亦然时使用它们。

再次,完整的代码作为gist提供:

在PHP中的AES加密和解密。


本文标题:用完整的代码在GoLang和PHP中进行AES加密和解密