我正在创建一个系统,用户可以通过PHP使用MySQL数据库存储消息,我使用MySQL AES_ENCRYPT函数来加密这些消息的内容.

这是我的帖子表:

CREATE TABLE IF NOT EXISTS `posts` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`user` int(11) DEFAULT NULL,

`group` int(11) DEFAULT NULL,

`body` varbinary(1000) NOT NULL,

`ip` varchar(45) NOT NULL,

`date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,

`replyto` int(11) DEFAULT NULL,

PRIMARY KEY (`id`),

KEY `replyto` (`replyto`),

KEY `user` (`user`)

) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=6 ;

ALTER TABLE `posts`

ADD CONSTRAINT `posts_ibfk_3` FOREIGN KEY (`replyto`) REFERENCES `posts` (`id`) ON DELETE SET NULL ON UPDATE CASCADE,

ADD CONSTRAINT `posts_ibfk_4` FOREIGN KEY (`user`) REFERENCES `users` (`id`) ON DELETE SET NULL ON UPDATE CASCADE;

我的用户表:

CREATE TABLE IF NOT EXISTS `users` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`ip` varchar(45) NOT NULL,

`date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,

`email` varchar(100) NOT NULL,

`name` varchar(100) NOT NULL,

`hash` varchar(128) NOT NULL,

`salt` varchar(32) NOT NULL,

`guid` varchar(36) NOT NULL,

PRIMARY KEY (`id`),

UNIQUE KEY `email` (`email`)

) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;

我用于消息体的AES加密密钥是前缀和后缀字符串之间的SHA-512哈希串联,以及中间的发布用户的GUID.因此,我有以下SQL查询来选择最新的消息:

SELECT AES_DECRYPT(`posts`.`body`, SHA2(CONCAT('prefix',(`users`.`guid`),'suffix'),512)) AS 'realbody'

FROM `posts`

INNER JOIN `users` ON `posts`.`user` = `users`.`id`

ORDER BY `posts`.`id` DESC

不幸的是,这不会返回解密的消息,您可以在屏幕截图中看到:

相反,我得到这个BLOB数据.但是,如果我从查询中删除ORDER BY子句:

SELECT AES_DECRYPT(`posts`.`body`, SHA2(CONCAT('prefix',(`users`.`guid`),'suffix'),512)) AS 'realbody'

FROM `posts`

INNER JOIN `users` ON `posts`.`user` = `users`.`id`

然后突然,它工作:

我真的不知道是什么原因引起的.有人有什么想法吗?

java aes mysql blob_使用带有ORDER子句的AES_DECRYPT在MySQL中返回BLOB数据相关推荐

  1. java struts2 ajax_在struts2的Action中返回Ajax数据

    author:z_xiaofei168 如何在struts2的action中返回数据(普通字符串.图片)给ajax核心中的XMLHttpRequest对象. 今天下午做项目,就是用户注册是时候,登录名 ...

  2. java aes javascript_Java已有AES加解密,现需要前端Javascript加密调接口,返回的数据需要解密,目前互通不了,找不到原因...

    目前Javascript使用'crypto-js'包. 前后台可以自己跑通加解密,但是,无法互通. 针对对象{}加密--网上的方案,已经尝试了4天左右了,还没成功,请指导. 无思路,无报错. Java ...

  3. aes js 加盐值 解密_Java已有AES加解密,现需要前端Javascript加密调接口,返回的数据需要解密,目前互..._慕课猿问...

    目前Javascript使用'crypto-js'包. 前后台可以自己跑通加解密,但是,无法互通. 针对对象{}加密--网上的方案,已经尝试了4天左右了,还没成功,请指导. 无思路,无报错. Java ...

  4. mysql 查询两表 两列 比较大小写_mysql 查询表中列的数据不区分大小写的解决

    mysql查询默认是不区分大小写的 如: select * from some_table where str='abc'; select * from some_table where str='A ...

  5. java 标注 json_java – 注释资源以生成JSON,但在响应头中返回“text/plain”

    嗯,你指的链接说只有REQUESTS才是真的. 因此,您只能接受纯文本,但可以随意生成您想要的内容. 编辑尝试使用类似的代码注册自定义responsefilter(也许你已经做过了吗?): @Prov ...

  6. java 固定值_这些频繁调用函数是否可以在dblquad中返回固定值?

    该脚本使用SciPy的dblquad计算来自均匀充电环的(x0,y0,z0)处的电场 . 我的问题是关于 gfun 和 hfun 的使用,它定义了内积分限制对外积分变量的函数依赖性 . 如果我选择整合 ...

  7. mysql nosql 同步_使用canal和canal_mysql_nosql_sync同步mysql数据

    场景: 有两个独立的项目A和B,都使用mysql做数据库, 其中项目A中有一个表存储新闻资讯,字段有新闻id,标题title,类型type,内容data. 后来项目B也需要这个表的数据,但项目B用了两 ...

  8. MySQL之创建函数,一次性插入表中多行数据

    MySQL之创建函数,一次性插入表中多行数据 一.MySQL之使用存储过程创建函数,一次性插入表中多行数据 一.MySQL之使用存储过程创建函数,一次性插入表中多行数据 #DELIMITER 的使用 ...

  9. java调用远程 接口_java通过url调用远程接口返回json数据

    java通过url调用远程接口返回json数据,有用户名和密码验证, 转自 https://blog.csdn.net/wanglong1990421/article/details/78815856 ...

最新文章

  1. 启动EBS的时候,弹出Java安全警告:“该应用程序要求具有Java的早期版本。是否要继续?”...
  2. [转]MySQL查询表内重复记录
  3. win 常用网络命令
  4. SVN文件库移植(转)
  5. SVM-支持向量机原理详解与实践之一
  6. reactjs Context的使用:一种组件间的通信方式
  7. java c3p0 配置文件_关于最近一直纠缠我的c3p0-config.xml配置文件找不到的问题终于解决了,\(^o^)/...
  8. Android消息处理机制(Handler、Looper、MessageQueue与Message)
  9. 深入理解input中的value、name、id的区别和用法——Web前端自学笔记
  10. SIFT算法中概念简单解释
  11. 前端局部自动刷新_jQuery实现AJAX定时刷新局部页面实例
  12. 利用POI 技术动态替换word模板内容
  13. multiplot 安装与配置
  14. 最新可乐云商城程序源码V0.6版本 可做实物商城网站
  15. sql 获取当前系统时间
  16. 十年Smartbi项目经理:BI应用在银行业的发展历程和展望
  17. 三宝小精灵机器人_“三宝”机器人
  18. php pack ode,Python中的数值ODE求解
  19. mapboxgl - 用webgl展示海量数据,是否可行?
  20. 计算机学院元旦晚会对联,学校元旦对联加横批

热门文章

  1. 使用 Vue.js 和 Chart.js 制作绚丽多彩的图表
  2. JAVA集合框架及其常用方法
  3. 详细bugfree使用教程网址
  4. 【cocos2d-x 手游研发----目录】
  5. 用启动易合并启动光盘图解教程
  6. java:为什么字符串比较时要用equals方法而不是==运算符
  7. C语言——选择法排序_数组
  8. pandas镜像安装_Python安装库太慢?配置好这个速度飞起
  9. 信息学奥赛一本通(1281:最长上升子序列)
  10. 理论基础 —— 二叉树 —— 二叉树的遍历