Шифрование и дешифрование AES в Golang поддерживает несколько комбинаций шифрования, таких как AES-ECB-PKCS7Padding, и совместимо с такими языками, как JAVA и PHP.
Шифрование и дешифрование AES в Golang поддерживает несколько комбинаций шифрования, таких как AES-ECB-PKCS7Padding, и совместимо с такими языками, как JAVA и PHP.

Расширенный стандарт шифрования (AES) в криптографии, также известный как метод шифрования Rijndael, используется для замены исходного DES. Длина блока данных, зашифрованного AES, должна составлять 128 бит, а длина ключа может быть любой: 128 бит, 192 бит или 256 бит.

Порекомендуйте здесь golang 的加Расшифровать Библиотека:https://github.com/forgoer/openssl

поддерживаетсяшифрованиемодельиметь:

  • AES-ECB/AES-CBC
  • DES-ECB/DES-CBC
  • 3DES-ECB/3DES-CBC
  • ...

наполнение

Существует три основных типа наполнения:

ZeroPadding, используется, когда длина данных не выровнена. 0 наполнение,В противном случае нетнаполнение。

PKCS7Padding, если длина данных требует заполнения n(n>0) выравниваются по байтам, затем наполнениеn байт, каждый байт n ;Если сами данные уже выровнены,Затем наполнение фрагмента данных длиной, равной размеру блока.,Каждый байт — это размер блока.

PKCS5Padding — подмножество PKCS7Padding с фиксированным размером блока 8 байт.

Вот метод наполнения:

Язык кода:go
копировать
func PKCS7Padding(src []byte, blockSize int) []byte {
	padding := blockSize - len(src)%blockSize
	padtext := bytes.Repeat([]byte{byte(padding)}, padding)
	return append(src, padtext...)
}

func PKCS7UnPadding(src []byte) []byte {
	length := len(src)
	unpadding := int(src[length-1])
	return src[:(length - unpadding)]
}

модель

Модель работы AES,Это отражается на процессе преобразования блоков открытого текста в блоки зашифрованного текста. Алгоритм шифрования AES предлагает пять различных моделей вакансий:

CBC、ECB、CTR、CFB、OFB

Вот модель ЕЦБ:

Язык кода:go
копировать
func ECBEncrypt(block cipher.Block, src, key []byte) ([]byte, error) {
	blockSize := block.BlockSize()

	encryptData := make([]byte, len(src))
	tmpData := make([]byte, blockSize)

	for index := 0; index < len(src); index += blockSize {
		block.Encrypt(tmpData, src[index:index+blockSize])
		copy(encryptData, tmpData)
	}
	return encryptData, nil
}

func ECBDecrypt(block cipher.Block, src, key []byte) ([]byte, error) {
	dst := make([]byte, len(src))

	blockSize := block.BlockSize()
	tmpData := make([]byte, blockSize)

	for index := 0; index < len(src); index += blockSize {
		block.Decrypt(tmpData, src[index:index+blockSize])
		copy(dst, tmpData)
	}

	return dst, nil
}

AES/ECB/PKCS7Padding

AES/ECB/PKCS7Padding также является одним из наиболее часто используемых методов шифрования.

Язык кода:go
копировать
    // шифрование
	src := []byte("123456")
	key := []byte("1234512345123451")

	block, err := aes.NewCipher(key)
	if err != nil {
		panic(err)
	}
    
	src = PKCS7Padding(src, block.BlockSize())

	dst, err := ECBEncrypt(block, src, key)
	if err != nil {
		panic(err)
	}

	fmt.Println(base64.StdEncoding.EncodeToString(dst)) // SpfAShHImQhWjd/21Pgz2Q==
	
	// Расшифровать
	src, err = ECBDecrypt(block, dst, key)
	if err != nil {
		panic(err)
	}

	src = PKCS7UnPadding(src)

	fmt.Println(string(src)) // 123456

Подробнее об Полный код реализации Аес, Des и т.п. шифрования,ссылка:https://github.com/forgoer/openssl

Исходный адрес: Шифрование и дешифрование AES в Golang поддерживает несколько комбинаций шифрования, таких как AES-ECB-PKCS7Padding, и совместимо с такими языками, как JAVA и PHP.

boy illustration
Учебное пособие по Jetpack Compose для начинающих, базовые элементы управления и макет
boy illustration
Код js веб-страницы, фон частицы, код спецэффектов
boy illustration
【новый! Суперподробное】Полное руководство по свойствам компонентов Figma.
boy illustration
🎉Обязательно к прочтению новичкам: полное руководство по написанию мини-программ WeChat с использованием программного обеспечения Cursor.
boy illustration
[Забавный проект Docker] VoceChat — еще одно приложение для мгновенного чата (IM)! Может быть встроен в любую веб-страницу!
boy illustration
Как реализовать переход по странице в HTML (html переходит на указанную страницу)
boy illustration
Как решить проблему зависания и низкой скорости при установке зависимостей с помощью npm. Существуют ли доступные источники npm, которые могут решить эту проблему?
boy illustration
Серия From Zero to Fun: Uni-App WeChat Payment Practice WeChat авторизует вход в систему и украшает страницу заказа, создает интерфейс заказа и инициирует запрос заказа
boy illustration
Серия uni-app: uni.navigateЧтобы передать скачок значения
boy illustration
Апплет WeChat настраивает верхнюю панель навигации и адаптируется к различным моделям.
boy illustration
JS-время конвертации
boy illustration
Обеспечьте бесперебойную работу ChromeDriver 125: советы по решению проблемы chromedriver.exe не найдены
boy illustration
Поле комментария, щелчок мышью, специальные эффекты, js-код
boy illustration
Объект массива перемещения объекта JS
boy illustration
Как открыть разрешение на позиционирование апплета WeChat_Как использовать WeChat для определения местонахождения друзей
boy illustration
Я даю вам два набора из 18 простых в использовании фонов холста Power BI, так что вам больше не придется возиться с цветами!
boy illustration
Получить текущее время в js_Как динамически отображать дату и время в js
boy illustration
Вам необходимо изучить сочетания клавиш vsCode для форматирования и организации кода, чтобы вам больше не приходилось настраивать формат вручную.
boy illustration
У ChatGPT большое обновление. Всего за 45 минут пресс-конференция показывает, что OpenAI сделал еще один шаг вперед.
boy illustration
Copilot облачной разработки — упрощение разработки
boy illustration
Микросборка xChatGPT с низким кодом, создание апплета чат-бота с искусственным интеллектом за пять шагов
boy illustration
CUDA Out of Memory: идеальное решение проблемы нехватки памяти CUDA
boy illustration
Анализ кластеризации отдельных ячеек, который должен освоить каждый&MarkerгенетическийВизуализация
boy illustration
vLLM: мощный инструмент для ускорения вывода ИИ
boy illustration
CodeGeeX: мощный инструмент генерации кода искусственного интеллекта, который можно использовать бесплатно в дополнение к второму пилоту.
boy illustration
Машинное обучение Реальный бой LightGBM + настройка параметров случайного поиска: точность 96,67%
boy illustration
Бесшовная интеграция, мгновенный интеллект [1]: платформа больших моделей Dify-LLM, интеграция без кодирования и встраивание в сторонние системы, более 42 тысяч звезд, чтобы стать свидетелями эксклюзивных интеллектуальных решений.
boy illustration
LM Studio для создания локальных больших моделей
boy illustration
Как определить количество слоев и нейронов скрытых слоев нейронной сети?
boy illustration
[Отслеживание целей] Подробное объяснение ByteTrack и детали кода