Skip to content

Commit

Permalink
modify iv
Browse files Browse the repository at this point in the history
  • Loading branch information
wumansgy committed Jul 30, 2021
1 parent efa0a06 commit e359121
Show file tree
Hide file tree
Showing 4 changed files with 160 additions and 162 deletions.
86 changes: 43 additions & 43 deletions aescbc.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,84 +8,84 @@ import (
)

/*
@Time : 2018/11/1 22:53
@Time : 2018/11/1 22:53
@Author : wuman
@File : AES_CBC
@Software: GoLand
*/
/**
eencrypt
Note: the key length is 16 bytes
*/
*/

func init(){
log.SetFlags(log.Ldate|log.Lshortfile)
func init() {
log.SetFlags(log.Ldate | log.Lshortfile)
}

// encrypt
func AesCbcEncrypt(plainText,key []byte,ivAes ...byte )([]byte,error){
if len(key) != 16 && len(key) != 24 && len(key) != 32{
return nil,ErrKeyLengthSixteen
func AesCbcEncrypt(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
if err != nil {
return nil, err
}
paddingText := PKCS5Padding(plainText, block.BlockSize())

var iv []byte
if len(ivAes)!=0{
if len(ivAes)!=16{
return nil,ErrIvAes
}else{
iv=ivAes
if len(ivAes) != 0 {
if len(ivAes) != 16 {
return nil, ErrIvAes
} else {
iv = ivAes
}
}else{
iv =[]byte(ivaes)
} else {
iv = []byte(ivaes)
} // To initialize the vector, it needs to be the same length as block.blocksize
blockMode := cipher.NewCBCEncrypter(block, iv)
cipherText := make([]byte,len(paddingText))
blockMode.CryptBlocks(cipherText,paddingText)
return cipherText,nil
cipherText := make([]byte, len(paddingText))
blockMode.CryptBlocks(cipherText, paddingText)
return cipherText, nil
}

// decrypt
func AesCbcDecrypt(cipherText,key []byte,ivAes ...byte) ([]byte,error){
if len(key) != 16 && len(key) != 24 && len(key) != 32{
return nil,ErrKeyLengthSixteen
func AesCbcDecrypt(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
if err != nil {
return nil, err
}

defer func(){
if err:=recover();err!=nil{
switch err.(type){
defer func() {
if err := recover(); err != nil {
switch err.(type) {
case runtime.Error:
log.Println("runtime err:",err,"Check that the key or text is correct")
log.Println("runtime err:", err, "Check that the key or text is correct")
default:
log.Println("error:",err)
log.Println("error:", err)
}
}
}()
var iv []byte
if len(ivAes)!=0{
if len(ivAes)!=16{
return nil,ErrIvAes
}else{
iv=ivAes
if len(ivAes) != 0 {
if len(ivAes) != 16 {
return nil, ErrIvAes
} else {
iv = ivAes
}
}else{
iv =[]byte(ivaes)
} else {
iv = []byte(ivaes)
}
blockMode := cipher.NewCBCDecrypter(block, iv)
paddingText := make([]byte,len(cipherText))
blockMode.CryptBlocks(paddingText,cipherText)

paddingText := make([]byte, len(cipherText))
blockMode.CryptBlocks(paddingText, cipherText)

plainText,err := PKCS5UnPadding(paddingText)
if err!=nil{
return nil,err
plainText, err := PKCS5UnPadding(paddingText)
if err != nil {
return nil, err
}
return plainText,nil
return plainText, nil
}
62 changes: 31 additions & 31 deletions aesctr.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,62 +6,62 @@ import (
)

/*
@Time : 2018/11/1 22:53
@Time : 2018/11/1 22:53
@Author : wuman
@File : AES_CTR
@Software: GoLand
*/
/*
AES CTR mode encryption and decryption
*/
func AesCtrEncrypt(plainText ,key []byte,ivAes...byte)([]byte,error){
if len(key) != 16 && len(key) != 24 && len(key) != 32{
return nil,ErrKeyLengthSixteen
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
if err != nil {
return nil, err
}
var iv []byte
if len(ivAes)!=0{
if len(ivAes)!=16{
return nil,ErrIvAes
}else{
iv=ivAes
if len(ivAes) != 0 {
if len(ivAes) != 16 {
return nil, ErrIvAes
} else {
iv = ivAes
}
}else{
iv =[]byte(ivaes)
} else {
iv = []byte(ivaes)
}
stream := cipher.NewCTR(block, iv)

cipherText := make([]byte,len(plainText))
stream.XORKeyStream(cipherText,plainText)
cipherText := make([]byte, len(plainText))
stream.XORKeyStream(cipherText, plainText)

return cipherText,nil
return cipherText, nil
}

func AesCtrDecrypt(cipherText ,key []byte,ivAes...byte)([]byte,error){
if len(key) != 16 && len(key) != 24 && len(key) != 32{
return nil,ErrKeyLengthSixteen
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
if err != nil {
return nil, err
}
var iv []byte
if len(ivAes)!=0{
if len(ivAes)!=16{
return nil,ErrIvAes
}else{
iv=ivAes
if len(ivAes) != 0 {
if len(ivAes) != 16 {
return nil, ErrIvAes
} else {
iv = ivAes
}
}else{
iv =[]byte(ivaes)
} else {
iv = []byte(ivaes)
}
stream := cipher.NewCTR(block, iv)

plainText := make([]byte,len(cipherText))
stream.XORKeyStream(plainText,cipherText)
plainText := make([]byte, len(cipherText))
stream.XORKeyStream(plainText, cipherText)

return plainText,nil
return plainText, nil
}
91 changes: 45 additions & 46 deletions descbc.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import (
)

/*
@Time : 2018/11/1 21:28
@Time : 2018/11/1 21:28
@Author : wuman
@File : DES_CBC
@Software: GoLand
Expand All @@ -17,77 +17,76 @@ import (
1. Group plaintext
DES CBC mode encryption and decryption, is an 8-byte block encryption
If the group is not an integer multiple of 8, you need to consider completing the 8 bits2.
*/
func init(){
log.SetFlags(log.Ldate|log.Lshortfile)
*/
func init() {
log.SetFlags(log.Ldate | log.Lshortfile)
}

func DesCbcEncrypt(plainText ,key []byte,ivDes...byte)([]byte,error){
if len(key)!=8{
return nil,ErrKeyLengtheEight
func DesCbcEncrypt(plainText, key, ivDes []byte) ([]byte, error) {
if len(key) != 8 {
return nil, ErrKeyLengtheEight
}
block, err := des.NewCipher(key)
if err!=nil{
return nil,err
if err != nil {
return nil, err
}
paddingText := PKCS5Padding(plainText, block.BlockSize())

var iv []byte
if len(ivDes)!=0{
if len(ivDes)!=8{
return nil,ErrIvDes
}else{
iv=ivDes
if len(ivDes) != 0 {
if len(ivDes) != 8 {
return nil, ErrIvDes
} else {
iv = ivDes
}
}else{
iv =[]byte(ivdes)
} // Initialization vector
} else {
iv = []byte(ivdes)
} // Initialization vector
blockMode := cipher.NewCBCEncrypter(block, iv)

cipherText := make([]byte,len(paddingText))
blockMode.CryptBlocks(cipherText,paddingText)
return cipherText,nil
cipherText := make([]byte, len(paddingText))
blockMode.CryptBlocks(cipherText, paddingText)
return cipherText, nil
}

func DesCbcDecrypt(cipherText ,key []byte,ivDes...byte) ([]byte,error){
if len(key)!=8{
return nil,ErrKeyLengtheEight
func DesCbcDecrypt(cipherText, key, ivDes []byte) ([]byte, error) {
if len(key) != 8 {
return nil, ErrKeyLengtheEight
}
block, err := des.NewCipher(key)
if err!=nil{
return nil,err
if err != nil {
return nil, err
}

defer func(){
if err:=recover();err!=nil{
switch err.(type){
defer func() {
if err := recover(); err != nil {
switch err.(type) {
case runtime.Error:
log.Println("runtime err:",err,"Check that the key or text is correct")
log.Println("runtime err:", err, "Check that the key or text is correct")
default:
log.Println("error:",err)
log.Println("error:", err)
}
}
}()

var iv []byte
if len(ivDes)!=0{
if len(ivDes)!=8{
return nil,ErrIvDes
}else{
iv=ivDes
if len(ivDes) != 0 {
if len(ivDes) != 8 {
return nil, ErrIvDes
} else {
iv = ivDes
}
}else{
iv =[]byte(ivdes)
} // Initialization vector
} else {
iv = []byte(ivdes)
} // Initialization vector
blockMode := cipher.NewCBCDecrypter(block, iv)

plainText := make([]byte,len(cipherText))
blockMode.CryptBlocks(plainText,cipherText)

plainText := make([]byte, len(cipherText))
blockMode.CryptBlocks(plainText, cipherText)

unPaddingText,err := PKCS5UnPadding(plainText)
if err!=nil{
return nil,err
unPaddingText, err := PKCS5UnPadding(plainText)
if err != nil {
return nil, err
}
return unPaddingText,nil
}
return unPaddingText, nil
}
Loading

0 comments on commit e359121

Please sign in to comment.