AES解密失败后要怎么处理

yz23je · · 751 次点击 · 开始浏览    置顶
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。

程序使用了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)] } ```

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

751 次点击  
加入收藏 微博
6 回复  |  直到 2022-02-14 15:24:36
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传