<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></title> 
<link>http://www.jackxiang.com/index.php</link> 
<description><![CDATA[赢在IT，Playin' with IT,Focus on Killer Application,Marketing Meets Technology.]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></copyright>
<item>
<link>http://www.jackxiang.com/post//</link>
<title><![CDATA[[实践OK]mysql加密存储敏感数据]]></title> 
<author>jack &lt;xdy108@126.com&gt;</author>
<category><![CDATA[数据库技术]]></category>
<pubDate>Wed, 22 Feb 2023 06:19:48 +0000</pubDate> 
<guid>http://www.jackxiang.com/post//</guid> 
<description>
<![CDATA[ 
	实践如下：<br/><textarea name="code" class="php" rows="15" cols="100">
CREATE DATABASE `test` /*!40100 DEFAULT CHARACTER SET utf8 */;
Query OK, 1 row affected (0.01 sec)
use test;
Database changed
create table test( id int (12),idcard varchar (128));
Query OK, 0 rows affected (0.03 sec)
INSERT INTO test (idcard) VALUES (HEX(AES_ENCRYPT(&#039;452528199909091234&#039;,&#039;my_secret_key&#039;))) ;
Query OK, 1 row affected (0.00 sec)
SELECT id,AES_DECRYPT(UNHEX(idcard),&#039;my_secret_key&#039;) AS idcard FROM test;
+------+--------------------+
&#124; id&nbsp;&nbsp; &#124; idcard&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#124;
+------+--------------------+
&#124; NULL &#124; 452528199909091234 &#124;
+------+--------------------+
1 row in set (0.00 sec)
select * from test&#92;G;
*************************** 1. row ***************************
&nbsp;&nbsp;&nbsp;&nbsp;id: NULL
idcard: AC89B7A39D9A5A43BF9B0B455E2097B37E7BB2A8379B6D820FB3FC97EEB197B2
1 row in set (0.00 sec)
SELECT id,LEFT(AES_DECRYPT(UNHEX(idcard),&#039;my_secret_key&#039;),6) AS idcard FROM test;
+------+--------+
&#124; id&nbsp;&nbsp; &#124; idcard &#124;
+------+--------+
&#124; NULL &#124; 452528 &#124;
+------+--------+
1 row in set (0.00 sec)
SELECT id,CONCAT(&#039;******&#039;,LEFT(AES_DECRYPT(UNHEX(idcard),&#039;my_secret_key&#039;),6)) AS idcard FROM test;
+------+--------------+
&#124; id&nbsp;&nbsp; &#124; idcard&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#124;
+------+--------------+
&#124; NULL &#124; ******452528 &#124;
+------+--------------+
1 row in set (0.01 sec)
SELECT id,AES_DECRYPT(UNHEX(idcard),&#039;my_secret_key&#039;) AS idcard FROM test&nbsp;&nbsp;WHERE idcard=HEX(AES_ENCRYPT(&#039;452528199909091234&#039;,&#039;my_secret_key&#039;));
+------+--------------------+
&#124; id&nbsp;&nbsp; &#124; idcard&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#124;
+------+--------------------+
&#124; NULL &#124; 452528199909091234 &#124;
+------+--------------------+
1 row in set (0.00 sec)
SELECT id,AES_DECRYPT(UNHEX(idcard),&#039;my_secret_key&#039;) AS idcard FROM test&nbsp;&nbsp;WHERE AES_DECRYPT(UNHEX(idcard),&#039;my_secret_key&#039;)=&#039;452528199909091234&#039;;
+------+--------------------+
&#124; id&nbsp;&nbsp; &#124; idcard&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#124;
+------+--------------------+
&#124; NULL &#124; 452528199909091234 &#124;
+------+--------------------+
1 row in set (0.00 sec)
</textarea><br/><br/>项目中涉及到用户敏感信息，比如手机号、身份证号码等，应该以密文形式存储在数据库中，本文例子演示如何利用mysql的加解密函数对数据进行加密存储、解密读取、以及过滤查询。<br/><br/>&nbsp;&nbsp;下面以在表&quot;test&quot;中将身份证信息写入&quot;idcard&quot;字段、以及从&quot;idcard&quot;字段读取数据、以及以&quot;idcard&quot;为过滤条件进行过滤查询为例子；假设加密秘钥为&quot;my_secret_key&quot;<br/><br/>一）加密存储数据：&#039;452528199909091234&#039;，秘钥为:&#039;my_secret_key&#039;<br/>INSERT INTO test (idcard) VALUES (HEX(AES_ENCRYPT(&#039;452528199909091234&#039;,&#039;my_secret_key&#039;))) <br/><br/>二）读取并解密数据返回<br/><br/>1.读取并解密数据，数据全部返回。<br/>SELECT id,AES_DECRYPT(UNHEX(idcard),&#039;my_secret_key&#039;) AS idcard FROM test<br/><br/>2.读取并解密数据，只返回最左边6个字符<br/>SELECT id,LEFT(AES_DECRYPT(UNHEX(idcard),&#039;my_secret_key&#039;),6) AS idcard FROM test<br/><br/>3.读取并解密数据，只返回最左边6个字符，补充前缀&#039;******&#039;，读出来的结果为<br/>SELECT id,CONCAT(&#039;******&#039;,LEFT(AES_DECRYPT(UNHEX(idcard),&#039;my_secret_key&#039;),6)) AS idcard FROM test<br/><br/>三）过滤查询<br/><br/>1.按照密文比较方式(要比较的数据先加密，加密后的数据和数据库里存的密文比较)<br/>SELECT id,AES_DECRYPT(UNHEX(idcard),&#039;my_secret_key&#039;) AS idcard FROM test&nbsp;&nbsp;WHERE idcard=HEX(AES_ENCRYPT(&#039;452528199909091234&#039;,&#039;my_secret_key&#039;))<br/><br/>2.按照明文比较方式(将数据库存的密文解密出明文，然后和要比较的数据进行比较)<br/>SELECT id,AES_DECRYPT(UNHEX(idcard),&#039;my_secret_key&#039;) AS idcard FROM test&nbsp;&nbsp;WHERE AES_DECRYPT(UNHEX(idcard),&#039;my_secret_key&#039;)=&#039;452528199909091234&#039;<br/>来自：<a href="https://blog.csdn.net/u010178611/article/details/126508465" target="_blank">https://blog.csdn.net/u010178611/article/details/126508465</a>
]]>
</description>
</item><item>
<link>http://www.jackxiang.com/post//#blogcomment</link>
<title><![CDATA[[评论] [实践OK]mysql加密存储敏感数据]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>http://www.jackxiang.com/post//#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>