Files
goEncrypt/aesctr.go
songguangyang e359121aa8 modify iv
2021-07-30 17:27:18 +08:00

68 lines
1.2 KiB
Go

package goEncrypt
import (
"crypto/aes"
"crypto/cipher"
)
/*
@Time : 2018/11/1 22:53
@Author : wuman
@File : AES_CTR
@Software: GoLand
*/
/*
AES CTR mode encryption and decryption
*/
func AesCtrEncrypt(plainText, key, ivAes []byte) ([]byte, error) {
if len(key) != 16 && len(key) != 24 && len(key) != 32 {
return nil, ErrKeyLengthSixteen
}
block, err := aes.NewCipher(key)
if err != nil {
return nil, err
}
var iv []byte
if len(ivAes) != 0 {
if len(ivAes) != 16 {
return nil, ErrIvAes
} else {
iv = ivAes
}
} else {
iv = []byte(ivaes)
}
stream := cipher.NewCTR(block, iv)
cipherText := make([]byte, len(plainText))
stream.XORKeyStream(cipherText, plainText)
return cipherText, nil
}
func AesCtrDecrypt(cipherText, key, ivAes []byte) ([]byte, error) {
if len(key) != 16 && len(key) != 24 && len(key) != 32 {
return nil, ErrKeyLengthSixteen
}
block, err := aes.NewCipher(key)
if err != nil {
return nil, err
}
var iv []byte
if len(ivAes) != 0 {
if len(ivAes) != 16 {
return nil, ErrIvAes
} else {
iv = ivAes
}
} else {
iv = []byte(ivaes)
}
stream := cipher.NewCTR(block, iv)
plainText := make([]byte, len(cipherText))
stream.XORKeyStream(plainText, cipherText)
return plainText, nil
}