使用Go和PHP进行AES加密

要在Go和PHP中使用AES加密,确保两者能够互相兼容,以下是详细步骤和示例:

在Go中进行AES加密:

  1. 安装加密库: 使用Go的标准库或者常用的第三方库如crypto库进行AES加密。确保在代码中导入必要的加密包。

  2. AES加密函数: Go中可以使用crypto/aes包来进行AES加密。一般的加密流程包括生成密钥、加密数据和解密数据。

    go
    package main import ( "crypto/aes" "crypto/cipher" "crypto/rand" "encoding/base64" "fmt" "io" ) func encrypt(key []byte, text string) (string, error) { block, err := aes.NewCipher(key) if err != nil { return "", err } plaintext := []byte(text) ciphertext := make([]byte, aes.BlockSize+len(plaintext)) iv := ciphertext[:aes.BlockSize] if _, err := io.ReadFull(rand.Reader, iv); err != nil { return "", err } mode := cipher.NewCBCEncrypter(block, iv) mode.CryptBlocks(ciphertext[aes.BlockSize:], plaintext) return base64.StdEncoding.EncodeToString(ciphertext), nil } func main() { key := []byte("0123456789abcdef0123456789abcdef") // 32 bytes for AES-256 plaintext := "Hello, world!" encrypted, err := encrypt(key, plaintext) if err != nil { fmt.Println("Encryption error:", err) return } fmt.Println("Encrypted:", encrypted) }
  3. 注意事项

    • 确保使用合适的AES模式(如CBC模式),生成随机的初始化向量(IV)。
    • 密钥长度应符合所选AES加密标准(如AES-128、AES-192或AES-256)。

在PHP中进行AES加密:

  1. 使用加密函数: PHP中可以使用openssl扩展库提供的函数来进行AES加密。确保PHP环境中已启用openssl扩展。

    php
    <?php function encrypt($key, $data) { $iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length('aes-256-cbc')); $encrypted = openssl_encrypt($data, 'aes-256-cbc', $key, OPENSSL_RAW_DATA, $iv); return base64_encode($iv . $encrypted); } $key = '0123456789abcdef0123456789abcdef'; // 32 bytes for AES-256 $plaintext = 'Hello, world!'; $encrypted = encrypt($key, $plaintext); echo "Encrypted: " . $encrypted . "\n"; ?>
  2. 注意事项

    • PHP中的openssl_encrypt函数需要提供明确的加密模式(如aes-256-cbc)和填充方式(如OPENSSL_RAW_DATA)。
    • 使用base64_encode将加密后的数据转换为可打印的字符串形式。

兼容性和交互操作:

  • 密钥和数据的传输: 确保在Go和PHP中使用相同的密钥长度和加密模式来保证兼容性。
  • 解密过程: 在解密数据时,Go和PHP端需要使用相同的解密算法和参数(如IV)来正确还原明文数据。

通过以上步骤和示例,可以在Go和PHP中实现AES加密,并确保两者之间的数据加密和解密操作可以正常交互和通信。