SQL:将未加密的值与加密值匹配

时间:2014-08-25 21:55:06

标签: mysql sql

我有一张这样的表:

-------------------------------------
| id   | name                       |
-------------------------------------
| 1    | butter                     |
| 2    | cheese                     |
| 3    | steak                      |
-------------------------------------

这些值的加密版本为:

SELECT id, ENCRYPT(`name`, 'thisismycoolsalt') FROM `table`

-------------------------------------
| id   | name                       |
-------------------------------------
| 1    | 74684a4e6b6d564b526e76674d |
| 2    | 74686e5a7379506554564b3451 |
| 3    | 74687341565776786a55704359 |
-------------------------------------

我的问题是,如果我有该名称的加密版本,我该如何选择未加密形式的行?

我正在尝试这样做,但这是不正确的语法:

SELECT *
FROM `table`
WHERE ENCRYPT(`name`, 'thisismycoolsalt')='74684a4e6b6d564b526e76674d'

1 个答案:

答案 0 :(得分:0)

您正在做的事情应该有效,如下所示:http://sqlfiddle.com/#!2/da7bc4/10

带有JOIN子句的版本:

SELECT
  plain.id, plain.name,
  encrypted.id AS e_id, encrypted.name AS e_name
FROM encrypted
INNER JOIN plain ON ENCRYPT(plain.name, encrypted.salt) = encrypted.name;

带有简单WHERE子句的版本:

SELECT *
FROM plain
WHERE ENCRYPT(name, 'thisismycoolsalt') = 'thsAVWvxjUpCY'

数据:

Plain table :

ID  NAME
1   butter
2   cheese
3   steak

Encrypted table :

ID  NAME            SALT
1   thJNkmVKRnvgM   thisismycoolsalt
2   thnZsyPeTVK4Q   thisismycoolsalt
3   thsAVWvxjUpCY   thisismycoolsalt

如果您需要更多帮助,也许您可​​以发布您获得的语法错误。