对称加密
// CoorCrypt project main.go
package main
//DES,3DES,AES
//用同一个秘钥加密和解密
import (
"bytes"
"crypto/cipher" //cipher密码
"crypto/des"
"encoding/base64" //将对象转换成字符串
"fmt"
)
//DES加密方法
func MyDesEncrypt(origData, key []byte) {
block, _ := des.NewCipher(key)
//将明文按秘钥的长度做补码运算
origData = PKCS5Padding(origData, block.BlockSize())
//设置加密方式
blockMode := cipher.NewCBCDecrypter(block, key)
//创建明文长度的字节数组
crypted := make([]byte, len(origData))
//加密明文
blockMode.CryptBlocks(crypted, origData)
//将字节数组转换成字符串
fmt.Println(base64.StdEncoding.EncodeToString(crypted))
}
//DES解密方法
func MyDESDecrypt(data string, key []byte) {
//将字符串转换成字节数组
crypted, _ := base64.StdEncoding.DecodeString(data)
//将字节秘钥转换成block快
block, _ := des.NewCipher(key)
//设置解密方式
blockMode := cipher.NewCBCEncrypter(block, key)
//创建密文大小的数组变量
origData := make([]byte, len(crypted))
//解密密文到数组origData中
blockMode.CryptBlocks(origData, crypted)
//去补码
origData = PKCS5UnPadding(origData)
//打印明文
fmt.Println(string(origData))
}
//实现明文的补码
func PKCS5Padding(ciphertext []byte, blockSize int) []byte {
padding := blockSize - len(ciphertext)%blockSize
padtext := bytes.Repeat([]byte{byte(padding)}, padding)
return append(ciphertext, padtext...)
}
//实现去补码
func PKCS5UnPadding(origData []byte) []byte {
length := len(origData)
// 去掉最后一个字节 unpadding 次
unpadding := int(origData[length-1])
return origData[:(length - unpadding)]
}
func main() {
fmt.Println("Hello World!")
//声明秘钥,利用此秘钥实现明文的加密和密文的解密
key := []byte("12345678")
//加密
MyDesEncrypt([]byte("hello kong yi a"), key)
//解密
MyDESDecrypt("Ijt9xl4BK6IS3KHHbmlMiA==", key)
}
//AES
//今天作业,自己创建一种对称加密算法