AESMode с шифрованием и расшифровкой ECB в Golang без заполнения

Я хочу сделать AESMode with ECB Encryption and Decryption на Голанге.

Ключ: 2A07EEF4384E7CD9671E1ED5BCF60029 Зашифрованный образец сообщения base64 Закодировано: g08cALdBhD8Q21d4pfjBKg== Я не могу расшифровать сообщение. Может ли кто-нибудь помочь мне, как я могу сделать AESMODE.ECB enc / dec в Golang.

В настоящее время я использую github.com/andreburgaud/crypt2go/ecb библиотека

Зашифровать код

 func EncryptASEWithECB(pt, key []byte) string {
    block, err := aes.NewCipher(key)
    if err != nil {
        panic(err.Error())
    }
    mode := ecb.NewECBEncrypter(block)
    ct := make([]byte, len(pt))
    mode.CryptBlocks(ct, pt)
    return base64.StdEncoding.EncodeToString(ct)
}

Расшифровать код

func DecryptASEWithECB(ct, key []byte) string {
    block, err := aes.NewCipher(key)
    if err != nil {
        panic(err.Error())
    }
    mode := ecb.NewECBDecrypter(block)
    pt := make([]byte, len(ct))
    mode.CryptBlocks(pt, ct)
    return string(pt)
}

Я получаю правильный результат, когда пробовал с этим Прецедент

func TestEncryptWithECB(b *testing.T) {
    key := []byte("2A07EEF4384E7CD9671E1ED5BCF60029")
    plaintext := []byte("exampleplaintext")
    encrypted := utils.EncryptASEWithECB(plaintext,key)
    fmt.Printf("encrypted : %s\n", encrypted)

    //plaintext = []byte(encrypted)
    
    sDec,err:= base64.StdEncoding.DecodeString(encrypted)
    fmt.Println(string(sDec),err)

    decrypted := utils.DecryptASEWithECB(sDec, key)
    fmt.Printf("decrypted : %s\n", decrypted)
}

Проблема Проблема в том, что мне нужно использовать AESMODE.ECB для получения значения из ниже зашифрованного сообщения Этот ключ и сообщение поступают от третьей стороны, и они сказали, что мы должны использовать AESMODE.ECB без заполнения для расшифровки этого сообщения.

Key: `2A07EEF4384E7CD9671E1ED5BCF60029`
Encrypted Sample Msg base64 Encoded: `g08cALdBhD8Q21d4pfjBKg==`

Но я не могу этого сделать. Кто-нибудь поможет, как я могу это сделать?

РешениеФункция тестирования обновлена

key, err := hex.DecodeString("2A07EEF4384E7CD9671E1ED5BCF60029")

func TestEncWithECB(b *testing.T) {
    //key := 
    //plaintext = []byte(encrypted)
    key,_ := hex.DecodeString("2A07EEF4384E7CD9671E1ED5BCF60029") //encode key in bytes to string and keep as secret, put in a vault
    fmt.Printf("key to encrypt/decrypt : %s\n", key)
    
    sDec,err:= base64.StdEncoding.DecodeString("g08cALdBhD8Q21d4pfjBKg= = ")
    fmt.Println(string(sDec),err)

    decrypted := utils.DecryptASEWithECB(sDec, key)
    fmt.Printf("decrypted : %s\n", decrypted)
}


Я ничего не тестировал, но, возможно, ключ является представлением ключа шестнадцатеричная строка, поэтому вы можете проверить с помощью «преобразователя шестнадцатеричной строки в байтовый массив» и использовать результат в качестве входных данных для вашей функции дешифрования :-)

Michael Fehr 01.04.2021 14:10

Ключ должен быть декодирован шестнадцатеричный: key, err := hex.DecodeString("2A07EEF4384E7CD9671E1ED5BCF60029"). Расшифровка - тестирование идет.

Topaco 01.04.2021 14:18

Да, это сработало, спасибо MichaelFehr и Topaco. Большое спасибо. Я обновлю пост и опубликую решение с этим.

Black_Dreams 01.04.2021 14:23
Создание API ввода вопросов на разных языках программирования (Python, PHP, Go и Node.js)
Создание API ввода вопросов на разных языках программирования (Python, PHP, Go и Node.js)
API ввода вопросов - это полезный инструмент для интеграции моделей машинного обучения, таких как ChatGPT, в приложения, требующие обработки...
0
3
45
0

Другие вопросы по теме