Расширенный стандарт шифрования (AES) в криптографии, также известный как метод шифрования Rijndael, используется для замены исходного DES. Длина блока данных, зашифрованного AES, должна составлять 128 бит, а длина ключа может быть любой: 128 бит, 192 бит или 256 бит.
Порекомендуйте здесь golang 的加Расшифровать Библиотека:https://github.com/forgoer/openssl
поддерживаетсяшифрованиемодельиметь:
Существует три основных типа наполнения:
ZeroPadding, используется, когда длина данных не выровнена. 0 наполнение,В противном случае нетнаполнение。
PKCS7Padding, если длина данных требует заполнения n(n>0) выравниваются по байтам, затем наполнениеn байт, каждый байт n ;Если сами данные уже выровнены,Затем наполнение фрагмента данных длиной, равной размеру блока.,Каждый байт — это размер блока.
PKCS5Padding — подмножество PKCS7Padding с фиксированным размером блока 8 байт.
Вот метод наполнения:
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
Вот модель ЕЦБ:
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 также является одним из наиболее часто используемых методов шифрования.
// шифрование
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