modify iv

This commit is contained in:
songguangyang
2021-07-30 17:27:18 +08:00
parent efa0a06017
commit e359121aa8
4 changed files with 160 additions and 162 deletions

View File

@@ -8,7 +8,7 @@ import (
)
/*
@Time : 2018/11/1 22:53
@Time : 2018/11/1 22:53
@Author : wuman
@File : AES_CBC
@Software: GoLand
@@ -16,76 +16,76 @@ import (
/**
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
}

View File

@@ -6,7 +6,7 @@ import (
)
/*
@Time : 2018/11/1 22:53
@Time : 2018/11/1 22:53
@Author : wuman
@File : AES_CTR
@Software: GoLand
@@ -14,54 +14,54 @@ import (
/*
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
}

View File

@@ -8,7 +8,7 @@ import (
)
/*
@Time : 2018/11/1 21:28
@Time : 2018/11/1 21:28
@Author : wuman
@File : DES_CBC
@Software: GoLand
@@ -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
}

View File

@@ -8,7 +8,7 @@ import (
)
/*
@Time : 2018/11/1 22:50
@Time : 2018/11/1 22:50
@Author : wuman
@File : TripleDES_CBC
@Software: GoLand
@@ -17,76 +17,75 @@ import (
Triple des encryption and decryption
algorithm : Encryption: key one encryption -> key two decryption -> key three encryption
Decryption: key three decryption -> key two encryption -> key one decryption
*/
func TripleDesEncrypt(plainText ,key []byte,ivDes...byte)([]byte,error){
if len(key)!=24{
return nil,ErrKeyLengthTwentyFour
*/
func TripleDesEncrypt(plainText, key, ivDes []byte) ([]byte, error) {
if len(key) != 24 {
return nil, ErrKeyLengthTwentyFour
}
block, err := des.NewTripleDESCipher(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)
} else {
iv = []byte(ivdes)
}
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 TripleDesDecrypt(cipherText ,key []byte,ivDes...byte) ([]byte,error){
if len(key)!=24{
return nil,ErrKeyLengthTwentyFour
func TripleDesDecrypt(cipherText, key, ivDes []byte) ([]byte, error) {
if len(key) != 24 {
return nil, ErrKeyLengthTwentyFour
}
// 1. Specifies that the 3des decryption algorithm creates and returns a cipher.Block interface using the TDEA algorithm。
block, err := des.NewTripleDESCipher(key)
if err!=nil{
return nil,err
if err != nil {
return nil, err
}
// 2. Delete the filling
// Before deleting, prevent the user from entering different keys twice and causing panic, so do an error handling
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 error:",err,"Check that the key is correct")
log.Println("runtime error:", err, "Check that the key 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)
} else {
iv = []byte(ivdes)
}
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
}