123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- package spiderutil
- import (
- "bytes"
- "crypto/aes"
- "crypto/cipher"
- )
- //aes ecb加密
- func AesECBEncrypt(data, key []byte) []byte {
- cipher, _ := aes.NewCipher(generateKey([]byte(key)))
- length := (len(data) + aes.BlockSize) / aes.BlockSize
- plain := make([]byte, length*aes.BlockSize)
- copy(plain, data)
- pad := byte(len(plain) - len(data))
- for i := len(data); i < len(plain); i++ {
- plain[i] = pad
- }
- encrypted := make([]byte, len(plain))
- // 分组分块加密
- for bs, be := 0, cipher.BlockSize(); bs <= len(data); bs, be = bs+cipher.BlockSize(), be+cipher.BlockSize() {
- cipher.Encrypt(encrypted[bs:be], plain[bs:be])
- }
- return encrypted
- }
- //aes ecb解密
- func AesECBDecrypter(data, key []byte) []byte {
- cipher, _ := aes.NewCipher(generateKey(key))
- decrypted := make([]byte, len(data))
- for bs, be := 0, cipher.BlockSize(); bs < len(data); bs, be = bs+cipher.BlockSize(), be+cipher.BlockSize() {
- cipher.Decrypt(decrypted[bs:be], data[bs:be])
- }
- trim := 0
- if len(decrypted) > 0 {
- trim = len(decrypted) - int(decrypted[len(decrypted)-1])
- }
- return decrypted[:trim]
- }
- //aes cbc加密
- func AesCBCEncrypt(data, key, iv []byte) []byte {
- // 创建一个AES块,使用提供的密钥
- block, _ := aes.NewCipher(key)
- // 使用CBC模式创建一个加密器
- mode := cipher.NewCBCEncrypter(block, iv)
- // 对数据进行填充
- padding := aes.BlockSize - len(data)%aes.BlockSize
- padtext := append(data, bytes.Repeat([]byte{byte(padding)}, padding)...)
- // 加密数据
- encrypted := make([]byte, len(padtext))
- mode.CryptBlocks(encrypted, padtext)
- return encrypted
- }
- //aes cbc解密
- func AesCBCDecrypter(data, key, iv []byte) []byte {
- block, _ := aes.NewCipher(key)
- decrypter := cipher.NewCBCDecrypter(block, iv)
- // 解密数据
- decrypted := make([]byte, len(data))
- decrypter.CryptBlocks(decrypted, data)
- // 去除填充
- unpadding := int(decrypted[len(decrypted)-1])
- return decrypted[:len(decrypted)-unpadding]
- }
- func generateKey(key []byte) (genKey []byte) {
- genKey = make([]byte, 16)
- copy(genKey, key)
- for i := 16; i < len(key); {
- for j := 0; j < 16 && i < len(key); j, i = j+1, i+1 {
- genKey[j] ^= key[i]
- }
- }
- return genKey
- }
|