@@ -40,23 +40,44 @@ func PKCS5UnPadding(origData []byte) []byte {
}
// AesEncrypt AES加密
func AesEncrypt ( origData , key [ ] byte ) ( [ ] byte , error ) {
func AesEncrypt ( plainText , key , iv [ ] byte ) ( [ ] byte , error ) {
if plainText == nil {
return nil , fmt . Errorf ( "plain text is nil" )
}
if key == nil {
return nil , fmt . Errorf ( "key is nil" )
}
block , err := aes . NewCipher ( key )
if err != nil {
return nil , err
}
//AES分组长度为128位, 所以blockSize=16, 单位字节
// AES分组长度为128位, 所以blockSize=16, 单位字节
blockSize := block . BlockSize ( )
origData = PKCS5Padding ( origData , blockSize )
blockMode : = cipher . NewCBCEncrypter ( block , key [ : blockSize ] ) //初始向量的长度必须等于块block的长度16字节
crypted := make ( [ ] byte , len ( origData ) )
blockMode . CryptBlocks ( crypted , origData )
return crypted , nil
if iv = = nil {
// 初始向量的长度必须等于块block的长度16字节
iv = key [ : blockSize ]
}
plainText = PKCS5Padding ( plainText , blockSize )
blockMode := cipher . NewCBCEncrypter ( block , iv )
cryptedText := make ( [ ] byte , len ( plainText ) )
blockMode . CryptBlocks ( cryptedText , plainText )
return cryptedText , nil
}
// AesDecrypt AES解密
func AesDecrypt ( crypted , key [ ] byte ) ( [ ] byte , error ) {
func AesDecrypt ( cryptedText , key , iv [ ] byte ) ( [ ] byte , error ) {
if cryptedText == nil {
return nil , fmt . Errorf ( "crypted text is nil" )
}
if key == nil {
return nil , fmt . Errorf ( "key is nil" )
}
block , err := aes . NewCipher ( key )
if err != nil {
return nil , err
@@ -64,9 +85,16 @@ func AesDecrypt(crypted, key []byte) ([]byte, error) {
//AES分组长度为128位, 所以blockSize=16, 单位字节
blockSize := block . BlockSize ( )
blockMode := cipher . NewCBCDecrypter ( block , key [ : blockSize ] ) //初始向量的长度必须等于块block的长度16字节
origData := make ( [ ] byte , len ( crypted ) )
blockMode . CryptBlocks ( origData , crypted )
origData = PKCS5UnPadding ( origData )
return origData , nil
if iv == nil {
// 初始向量的长度必须等于块block的长度16字节
iv = key [ : blockSize ]
}
blockMode := cipher . NewCBCDecrypter ( block , iv )
plainText := make ( [ ] byte , len ( cryptedText ) )
blockMode . CryptBlocks ( plainText , cryptedText )
plainText = PKCS5UnPadding ( plainText )
return plainText , nil
}