位置: 编程技术 - 正文

MySQL利用AES_ENCRYPT()与AES_DECRYPT()加解密的正确方法示例(MySQL利用不同的流程语句输出1到200的和)

编辑:rootadmin

推荐整理分享MySQL利用AES_ENCRYPT()与AES_DECRYPT()加解密的正确方法示例(MySQL利用不同的流程语句输出1到200的和),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:MySQL利用子查询查询部门在销售部工作员工的姓名,MySQL利用子查询查询部门在销售部工作员工的姓名,MySQL利用视图查询员工进货数量要求输出姓名进货数量,MySQL利用正则表达式判断身份证号,MySQL利用命令行工具启动和关闭的命令是什么,MySQL利用视图查询员工进货数量要求输出姓名进货数量,MySQL利用视图查询员工进货数量要求输出姓名进货数量,MySQL利用正则表达式判断身份证号,内容如对您有帮助,希望把文章链接给更多的朋友!

前言

最近在工作中遇到一个需求是这样的:需要在使用AES_ENCRYPT()函数将明文加密,存储在MySQL中,但是遇到了一些问题……下面就来详细介绍下。

说将加密后的密文,解密取出来是NULL。

看了一下,她发过来的表结构:

再看了她通过AES_DECRYPT()函数加密了一个字符串,然后insert进去了,执行成功后,显示了一个warning:Query OK, 1 row affected, 1 warning (0. sec)

(没有报错而是warning,大概是sql_mode的缘故)

此时她忽略了这个warning,再通过AES_DECRYPT()解密后,发现取出来的明文为NULL。

再回看表结构,发现其字段属性为“varchar” && 字符集是ut8,检查warning为下:

查了一下文档,看一下这两个函数的使用:

那么到底该如何存呢?

方法①:

将字段属性设置为varbinary/binary/四个blob类型,等二进制字段属性。

创建三个字段,属性分别为varbinary、binary、blob。

并将'明文1','text2','明文_text3'加密,密钥为key,存入表中。

最后取出。

MySQL利用AES_ENCRYPT()与AES_DECRYPT()加解密的正确方法示例(MySQL利用不同的流程语句输出1到200的和)

当然,属性括号内的长度要取决于明文的长度,此处明文较短,故只给了。

方法②:

将密文十六进制化,再存入varchar/char列。

此处需要用到HEX()来存入,用UNHEX()取出。

创建一个字符串属性的字段。

将'hello world'先用密钥'key2'进行AES加密,再将加密后的串通过HEX函数十六进制化。

最后先将加密后的串通过UNHEX取出,再通过AES据密钥'key2'解密:

同样,根据明文的长度不同,AES_ENCRYPT加密后的串长度也会有所变化,所以HEX后的字符串长度也会有所变化。实际使用时,需要据业务评估出一个合理值即可。

方法③:

直接存入varchar中,不做十六进制化。

回溯到问题的一开始,将加密后的串,存到utf8字符集并且属性为varchar中,是不行的。

实际上,将字符集改成latin1就可以了:

在insert的时候也不会报warning了。

这样的方法虽然美,只需将字段字符集设置为latin1就可以了,但可能会带来隐患:

文档上写了这样的一句:

Many encryption and compression functions return strings for which the result might contain arbitrary byte values. If you want to store these results, use a column with a VARBINARY or BLOB binary string data type. This will avoid potential problems with trailing space removal or character set conversion that would change data values, such as may occur if you use a nonbinary string data type (CHAR, VARCHAR, TEXT).

大意是,如果用方法③那样,直接将加密后的串存入char/varchar/text类型中,在做字符转换的时或空格被删除时,可能会带来潜在的影响。

所以如果一定要存在char/varchar/text中,那么还是参考方法②,十六进制化一下吧。

或者如同方法①,直接存在二进制字段中。

总结

标签: MySQL利用不同的流程语句输出1到200的和

本文链接地址:https://www.jiuchutong.com/biancheng/348715.html 转载请保留说明!

上一篇:MySQL中预处理语句prepare、execute与deallocate的使用教程(数据库预处理语句)

下一篇:MySQL5.7.03 更换高版本到MySQL 5.7.17安装过程及发现问题解决方案(mysql改造)

  • 个税申诉已受理怎么撤销
  • 税务硕士是什么学位类别
  • 会展服务费怎么开票
  • 外经证错了已经交了税怎么办
  • 汽车装饰属于什么服务
  • 代收水电费的账务处理
  • 个体工商户个税税率表2023年
  • 民间非营利组织会计制度最新版
  • 机器设备折旧费用属于间接生产费用
  • 计提成本会计分录
  • 营改增后还有营业费用吗
  • 工会经费基数是上个月收到的工资还是什么
  • 申办企业所得税抵缴带哪些资料?
  • 核定征收的企业需要汇算清缴吗
  • 消费税有哪几种纳税方式
  • 一般纳税人专业分包税率
  • 以前年度损益调整贷方余额表示什么
  • 未确认收入的增值税怎么记账
  • 企业筹建期购买设备是否可以扣除
  • 进口货物需要缴纳教育费附加
  • 新员工15号入职交社保吗
  • 收到退回增值税和附加税怎么处理
  • 如何能屏蔽自动扣费服务
  • 财务预算业务制度有哪些
  • php判断为空的方法有哪些
  • thinkphp怎么部署
  • opencart 二次开发
  • 品质扣款单
  • 分红率与股息率有啥区别
  • 增值税逾期申报情况说明
  • 深度学习中模型计算量(FLOPs)和参数量(Params)的理解以及四种计算方法总结
  • it最高工资
  • kaggle能赚钱吗
  • PHP:getimagesize()的用法_GD库图像处理函数
  • 职工食堂外包账务怎么做
  • php导出大量数据
  • 2022年最新公务接待标准
  • 汇率一般是以几位数来显示
  • 中国姓氏英文写法
  • 小规模免增值税政策从什么时候开始
  • 施工企业的人工费占比
  • 工会经费的会计分录2022
  • 企业收到土地补偿金需要开发票吗
  • 扫码开票软件
  • 六税一费减免
  • 跨月的普通发票怎么开红字发票
  • 进口增值税已抵进项税额
  • 合同终止已开发怎么办
  • 现金进货账务处理
  • 土地出让金印花税减半政策
  • 财产租赁所得是指
  • 旅游公司怎么交增值税
  • 公账钱怎么取出
  • 低值易耗品最新定义
  • sql常见的数据类型有哪些
  • CentOS 6.5 i386 安装MySQL 5.7.18详细教程
  • 用Win7系统的Syskey命令来设置系统的启动密码
  • win8.1应用商店还能用吗
  • solaris删除文件命令
  • WINDOWS操作系统内置的GUEST
  • win7系统怎样设置
  • linux修改计算机主机名和用户名
  • Linux下通过script 命令记录(数据库)操作步骤
  • 如何灵活使用蒙恬
  • vncviewer连接linux
  • win10预览版好吗
  • win7电脑耳机插上还是外放
  • 2015.6.28开始写博客记录cocos2dx学习历程
  • Windows 7 OpenGL配置,解决“无法启动此程序,因为计算机中丢失glut32.dll。”
  • jquery链式操作原理
  • 所有的未知
  • C# list多字段排序sort
  • 使用jquery实现的项目
  • python运行批处理文件
  • 个人取得抽奖,购车抵用,需要缴纳个人所得税吗
  • 资产管理公司收购不良资产后怎么处置
  • 境外服务收入如何纳税
  • 黑龙江省国税局网站
  • 税务公文字体
  • 河南国税网上办证流程
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设