В Go можно перевести шестнадцатеричную строку в бинарные данные и декодировать OpenSSL-зашифрованный текст с помощью пакетов "encoding/hex" и "crypto/cipher". Вот пример кода, демонстрирующий, как это сделать:
package main import ( "bytes" "crypto/aes" "crypto/cipher" "encoding/hex" "fmt" ) func main() { // Шестнадцатеричная строка, которую нужно преобразовать в бинарные данные hexString := "48656c6c6f20576f726c6421" // Пароль и вектор инициализации (IV) для OpenSSL-шифрования password := "myPassword123" iv := "1234567890123456" // Преобразование шестнадцатеричной строки в бинарные данные binaryData, err := hex.DecodeString(hexString) if err != nil { fmt.Println("Ошибка при декодировании шестнадцатеричной строки:", err) return } // Расшифровка с использованием OpenSSL-совместимого алгоритма (AES-256/CBC) plaintext, err := decryptOpenSSL(binaryData, []byte(password), []byte(iv)) if err != nil { fmt.Println("Ошибка при расшифровке данных:", err) return } fmt.Println("Расшифрованный текст:", string(plaintext)) } func decryptOpenSSL(ciphertext, key, iv []byte) ([]byte, error) { block, err := aes.NewCipher(key) if err != nil { return nil, err } mode := cipher.NewCBCDecrypter(block, iv) // Расшифровка данных plaintext := make([]byte, len(ciphertext)) mode.CryptBlocks(plaintext, ciphertext) // Удаление дополнительных байтов, добавленных в результат OpenSSL plaintext = bytes.TrimRight(plaintext, "x04") return plaintext, nil }
Обратите внимание, что в этом коде используется алгоритм шифрования AES-256 в режиме CBC с заданным паролем и вектором инициализации. Если ваши данные были зашифрованы с использованием других параметров, вам может потребоваться изменить код соответственно.