Go шифрует только текст в сообщении длиной 16 байт? - PullRequest
0 голосов
/ 05 августа 2020

Я пытаюсь зашифровать сообщение с использованием AES в Golang.

func main() {
    key := "mysupersecretkey32bytecharacters"
    plainText := "thisismyplaintextingolang"

    fmt.Println("My Encryption")
    byteCipherText := encrypt([]byte(key), []byte(plainText))
    fmt.Println(byteCipherText)
}

func encrypt(key, plaintext []byte) []byte {
    cphr, err := aes.NewCipher(key)
    if err != nil {
        panic(err)
    }
    ciphertext := make([]byte, len(plaintext))
    cphr.Encrypt(ciphertext, plaintext)
    return ciphertext
}

Эта функция возвращает: [23 96 11 10 70 223 95 118 157 250 80 92 77 26 137 224 0 0 0 0 0 0 0 0 0]

В этом результате есть только 16 ненулевых байтов ценности. Это означает, что шифрование AES в Go шифрует только 16 символов. Можно ли зашифровать более 16 символов в Go AES без использования какого-либо режима в AES (например, GCM, CB C, CFB, ..et c), только чистый AES?

Ответы [ 2 ]

6 голосов
/ 05 августа 2020

aes.NewCipher возвращает экземпляр cipher.Block, который шифрует блоками по 16 байт (так работает чистый AES).

режим работы буквально определяет, как шифруются сообщения длиной более 16 байт. Самым простым из них является ECB (режим «без операций»), который просто повторяет шифрование блоками по 16 байт с использованием одного и того же ключа. Вы можете сделать то же самое, используя простой for-l oop, но имейте в виду, что ECB не очень безопасен.

4 голосов
/ 05 августа 2020

Это не имеет ничего общего с go. AES - это блочный шифр, который шифрует блок размером 16 байт. Чтобы зашифровать более длинные сообщения, есть несколько режимов, которые можно использовать для этого.

...