1. 首页
  2. 主题
  3. Go问与答

AES解密失败后要怎么处理

yz23je · · 1651 次点击
程序使用了AES加密解密,如果加密后的字符串和密钥都不变的情况下,可以正常解密不会出错。 但是由于加密后的字符串是给前端的,很难保证前端不会被修改此加密的字符串。一但修改了 后台在解密的时候直接恐慌了,程序停止运行,这就有点尴尬了。 这应该怎么解决呢,如解密不成功返回个错误或是有什么函数可以判断字符串是不是AES加密的? ``` /** * @描述: 加密 * @参数:orig:需要加密的字符串 * @参数:key:密钥 * @返回值:返回加密后的字符串值 **/ func GF_AesEncrypt(orig string, key string) string { // 转成字节数组 origData := []byte(orig) k := []byte(key) // 分组秘钥 block, _ := aes.NewCipher(k) // 获取秘钥块的长度 blockSize := block.BlockSize() // 补全码 origData = pKCS7Padding(origData, blockSize) // 加密模式 blockMode := cipher.NewCBCEncrypter(block, k[:blockSize]) // 创建数组 cryted := make([]byte, len(origData)) // 加密 blockMode.CryptBlocks(cryted, origData) return base64.StdEncoding.EncodeToString(cryted) } /** * @描述: 解密(如果密钥或密文改变了,则解密结果会恐慌) * @参数:cryted:需要解密的字符串 * @参数:key:密钥 * @返回值:返回解密后的字符串值 **/ func GF_AesDecrypt(cryted string, key string) string { // 转成字节数组 crytedByte, _ := base64.StdEncoding.DecodeString(cryted) k := []byte(key) // 分组秘钥 block, _ := aes.NewCipher(k) // 获取秘钥块的长度 blockSize := block.BlockSize() // 加密模式 blockMode := cipher.NewCBCDecrypter(block, k[:blockSize]) // 创建数组 orig := make([]byte, len(crytedByte)) // 解密 blockMode.CryptBlocks(orig, crytedByte) // 去补全码 orig = pKCS7UnPadding(orig) return string(orig) } // 补码 func pKCS7Padding(ciphertext []byte, blocksize int) []byte { padding := blocksize - len(ciphertext)%blocksize padtext := bytes.Repeat([]byte{byte(padding)}, padding) return append(ciphertext, padtext...) } // 去码 func pKCS7UnPadding(origData []byte) []byte { length := len(origData) unpadding := int(origData[length-1]) return origData[:(length - unpadding)] } ```
代码是网上找到,你不说我都没注意看前面有忽略错误,大意了,大意了。谢谢啊。
#4
更多评论
为什么你 用 _ 忽略了这么多err 正常情况下,哪怕密钥错了,Aes的解码也不会直接报错吧? 报错说明是数据格式错误,所有有错误直接按借口返回约定好的失败内容不就好了......
#1
如果忽略错误,你可以用 recover
#2

用户登录

没有账号?注册

今日阅读排行

    加载中

一周阅读排行

    加载中