«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Почему моя функция шифрования AES ECB в Go не возвращает никаких данных?

Почему моя функция шифрования AES ECB в Go не возвращает никаких данных?

Опубликовано 17 января 2025 г.
Просматривать:834

Why is my AES ECB Encryption Function in Go Not Returning Any Data?

Шифрование AES ECB в Go: устранение неполадок и реализация

Ваша первоначальная попытка реализовать шифрование AES ECB в Go столкнулась с некоторыми препятствиями. Вот подробное объяснение и исправленное решение кода:

Заполнение PKCS5

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

Режим шифрования

Пакет Go AES явно не обеспечивает режим «ECB» параметр. Однако вы можете имитировать его, расшифровав данные в блоках фиксированного размера: шифр, _ := aes.NewCipher([]byte(KEY)) bs := aes.BlockSize если len(зашифрованный текст)%bs != 0 { паника("Нужно кратное размеру блока") } открытый текст:= make([]byte, len(зашифрованный текст)) для len(открытый текст) > 0 { cipher.Decrypt(открытый текст, зашифрованный текст) открытый текст = открытый текст[bs:] зашифрованный текст = зашифрованный текст[bs:] } вернуть открытый текст }

Этот код разбивает зашифрованный текст на блоки, расшифровывает каждый блок и добавляет расшифрованные блоки в буфер открытого текста.

Проблема реализации
func AESECB(ciphertext []byte) []byte {
    cipher, _ := aes.NewCipher([]byte(KEY))
    bs := aes.BlockSize
    if len(ciphertext)%bs != 0 {
        panic("Need a multiple of the block size")
    }
    plaintext := make([]byte, len(ciphertext))
    for len(plaintext) > 0 {
        cipher.Decrypt(plaintext, ciphertext)
        plaintext = plaintext[bs:]
        ciphertext = ciphertext[bs:]
    }
    return plaintext
}

пересмотренная функция

AESECB

, похоже, не возвращает никаких данных. Убедитесь, что вы вызываете его правильно и передаете зашифрованный текст в качестве аргумента.

Важное примечание по безопасности

Примечательно, что режим ECB не является криптографически безопасным. Повторяющиеся блоки открытого текста всегда создают идентичные зашифрованные блоки, что делает их уязвимыми для определенных атак. Для надежного шифрования настоятельно рекомендуется использовать более безопасные режимы работы, такие как CBC, CTR или GCM.

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3