AES加解密,vue加密,goframe解密代码

AES CBC模式的加解密示例,前端使用Vue.js,后端使用GoFrame框架。

前端加密代码(Vue.js):

import CryptoJS from 'crypto-js'

// 加密
export function encrypt(data, key, iv) {
  key = CryptoJS.enc.Utf8.parse(key)
  iv = CryptoJS.enc.Utf8.parse(iv)
  let encrypted = CryptoJS.AES.encrypt(data, key, {
    iv: iv,
    mode: CryptoJS.mode.CBC,
    padding: CryptoJS.pad.Pkcs7
  })
  return encrypted.toString()
}

// 解密
export function decrypt(data, key, iv) {
  key = CryptoJS.enc.Utf8.parse(key)
  iv = CryptoJS.enc.Utf8.parse(iv)
  let decrypted = CryptoJS.AES.decrypt(data, key, {
    iv: iv,
    mode: CryptoJS.mode.CBC,
    padding: CryptoJS.pad.Pkcs7
  })
  return decrypted.toString(CryptoJS.enc.Utf8)
}

后端解密代码(GoFrame框架):

import (
    "crypto/aes"
    "crypto/cipher"
    "encoding/base64"
)

// 解密函数
func AesDecrypt(crypted, key, iv string) (string, error) {
    keyBytes := []byte(key)
    ivBytes := []byte(iv)
    cryptedBytes, err := base64.StdEncoding.DecodeString(crypted)
    if err != nil {
        return "", err
    }
    block, err := aes.NewCipher(keyBytes)
    if err != nil {
        return "", err
    }
    blockMode := cipher.NewCBCDecrypter(block, ivBytes)
    origData := make([]byte, len(cryptedBytes))
    blockMode.CryptBlocks(origData, cryptedBytes)
    origData = PKCS7UnPadding(origData)
    return string(origData), nil
}

// PKCS7 Padding
func PKCS7Padding(ciphertext []byte, blockSize int) []byte {
    padding := blockSize - len(ciphertext)%blockSize
    padtext := bytes.Repeat([]byte{byte(padding)}, padding)
    return append(ciphertext, padtext...)
}

// PKCS7 UnPadding
func PKCS7UnPadding(origData []byte) []byte {
    length := len(origData)
    unpadding := int(origData[length-1])
    return origData[:(length - unpadding)]
}

使用示例:

// 前端加密
let data = 'Hello World'
let key = '1234567890123456'
let iv = '1234567890123456'
let encryptedData = encrypt(data, key, iv)

// 后端解密
decryptedData, err := AesDecrypt(encryptedData, key, iv)
if err != nil {
    // 解密失败
}

报错: exception recovered: runtime error: slice bounds out of range [:-91]

解释: 这个异常的原因可能是在解密过程中出现了越界的情况,具体原因需要查看代码并进行调试。

一种可能的情况是解密的密钥或向量不正确,导致解密后的明文长度不足,从而导致越界异常。另一种可能是解密的密文本身就存在问题,比如长度不正确或格式错误。

建议检查密钥、向量和密文是否正确,以及解密代码中的边界情况是否处理完备,如果仍然无法解决问题,可以提供更多的代码信息以便进一步分析。

posted @ 2023-04-17 21:13  zjMars  阅读(215)  评论(0)    收藏  举报