首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有办法只加密尚未加密的数据?

有没有办法只加密尚未加密的数据?
EN

Stack Overflow用户
提问于 2018-09-13 06:01:11
回答 1查看 42关注 0票数 1

有没有办法只加密尚未加密的数据?(有没有办法区分加密和未加密的数据?)

请假设我有一个列,其中一些数据已经加密,但有些数据没有加密。

加密代码

代码语言:javascript
复制
update usersExample3 set password=aes_encrypt(password,'1234');

我有一个存储过程,我必须修复它,但不确定如何修复它:

代码语言:javascript
复制
DELIMITER //

CREATE PROCEDURE de ()
LANGUAGE SQL
DETERMINISTIC
SQL SECURITY DEFINER
COMMENT 'A procedure'
BEGIN
 while(there is any not encrypted data in the table)
  --if(usersExample3.password is not encrypted yet)
       update usersExample3 set password=aes_decrypt(password,'1234');
  --else (do nothing)
END//

;

我的数据库示例:

代码语言:javascript
复制
select * from usersExample3 where userId<=5;


userId  username    password            salt
1       Tom         Password1234        NULL
4       bdfg        θ¨¾jj;öN/yë‘   bcv
5       test        test                test

所以这里我想更新所有还没有加密的数据(在这个示例中是userId 1和5。问题是每个人都在数据库中添加数据,所以当数据保存在表中时,我有一个触发器(在insert之后),它调用这个存储过程来自动加密新数据。谢谢

EN

回答 1

Stack Overflow用户

发布于 2018-09-13 06:57:54

在一般情况下-不,你不能区分加密和非加密数据。Buuut,看看你的例子,也许我们可以更接近。未加密的密码将具有“普通”字符,人们可以在键盘上键入。加密后的文件将包含各种没有意义的二进制垃圾。因此,第一个想法是简单地检查密码是否包含ASCII代码<32或>127的字符。

然而,这还不是最简单的。有时人们也会使用更复杂的字符。如果有人输入Glāžšķūņu rūķīši作为他们的密码,它在某些语言中仍然是合法的单词(在本例中是拉脱维亚语),但您可能会认为它是加密的。

这就引出了一个问题--该列的字符集是什么?这是一个我从一开始就觉得可疑的地方,因为你是如何在这里存储普通文本和二进制垃圾的?闻起来好像有人不理解字符集,因为在正常情况下这样做会造成很大的混乱。

无论如何,如果它是存储在拉丁-1列中的utf-8文本(一种常见的情况),您现在实际上可以使用它-所有不是有效的utf-8字符串的单元格(加上那些字符<32的单元格)都将被加密。

(但是,如果真的是这样,我强烈建议您尽快修复它,并确保从头到尾到处都使用utf-8。这样就不会那么头疼了。这里是关于整个字符集的mandatory reading )

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52304074

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档