首页 > 文章列表 > 从PHP到Golang:使用openssl des-ede3-cbc

从PHP到Golang:使用openssl des-ede3-cbc

161 2024-02-06
问题内容

我有以下 php 代码:

$l = ceil(strlen($message) / 8) * 8;
$enc = substr(openssl_encrypt($message . str_repeat("", $l - strlen($message)), 'des-ede3-cbc', $key, openssl_raw_data, ""), 0, $l);

如何在 go 中实现它?

我尝试了这样的方法,但得到了不同的结果:

block, err := des.NewTripleDESCipher(key)
    if err != nil {
        fmt.Printf("err: %s", err)
        return
    }

    // Create initialization vector from rand.reader
    iv := make([]byte, des.BlockSize)
    if _, err := io.ReadFull(rand.Reader, iv); err != nil {
        fmt.Printf("err: %s", err)
        return
    }

    // Encrypt with CBC mode
    cipherText := make([]byte, len(plainText))
    encryptMode := cipher.NewCBCEncrypter(block, iv)
    encryptMode.CryptBlocks(cipherText, plainText)

    str := hex.EncodeToString(cipherText)

    fmt.Println("Cipher text: %s", str)


正确答案


发现错误了。我使用 rand.Reader 作为 iv 但在 PHP 中是不同的。

var iv = []byte{0, 0, 0, 0, 0, 0, 0, 0}