mirror of
https://github.com/wumansgy/goEncrypt.git
synced 2025-09-26 19:51:27 +08:00
modify iv
This commit is contained in:
86
aescbc.go
86
aescbc.go
@@ -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
|
||||
}
|
||||
|
62
aesctr.go
62
aesctr.go
@@ -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
|
||||
}
|
||||
|
91
descbc.go
91
descbc.go
@@ -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
|
||||
}
|
||||
|
@@ -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
|
||||
}
|
||||
|
Reference in New Issue
Block a user