了解 MYSQL 中的 DECODE 和 ENCODE
Uderstanding DECODE and ENCODE in MYSQL
我需要以加密的方式保存 id,以便它正好占用 8 个字符。
我使用以下命令做到了这一点:
SELECT encode(LPAD(id,4,0),'abc')
此命令将 id = 1
变成 0001 然后把它变成代码 fe5ab21a
如何解密此代码?
下面是一个 select 的示例及其生成的结果
SELECT 0001
, DECODE(ENCODE('0001', 'abc'), 'abc')
, UNHEX(DECODE(ENCODE('0001', 'abc'), 'abc'))
, ENCODE('0001','abc')
, DECODE('fe5ab21a', 'abc')
, UNHEX(DECODE('fe5ab21a', 'abc'))
, HEX('0001')
结果:
1
30303031
0001
fe5ab21a
68d357a7005dcbe0
NULL
30303031
据我所知,您想制作一个与您的 ID 相关联的简短唯一密钥传递。
小心这种加密方式,如果有人想破解它,不到几分钟的时间,它真的很弱。但是如果只是为了某些人没有安全风险的混淆,没问题。
为了提高一点安全性(但会降低用户体验),尝试使用AES_ENCRYPT()
您的代码的错误在于您没有强制使用 input/output 的类型,这里是正确输入的内容。
MySQL 5.6 架构设置:
CREATE TABLE t
(`id` int, `name` varchar(7))
;
INSERT INTO t
(`id`, `name`)
VALUES
(1, 'hello'),
(2, 'hola'),
(3, 'bonjour')
;
查询 1:
select *, ENCODE(id,'KEY') as encrypted_id from t
| id | name | encrypted_id |
|----|---------|--------------|
| 1 | hello | Vw== |
| 2 | hola | yw== |
| 3 | bonjour | iA== |
查询 2:
SELECT * from t where id = CAST(DECODE(FROM_BASE64('yw=='),'KEY') AS CHAR(50))
| id | name |
|----|------|
| 2 | hola |
我需要以加密的方式保存 id,以便它正好占用 8 个字符。 我使用以下命令做到了这一点:
SELECT encode(LPAD(id,4,0),'abc')
此命令将 id = 1 变成 0001 然后把它变成代码 fe5ab21a
如何解密此代码?
下面是一个 select 的示例及其生成的结果
SELECT 0001
, DECODE(ENCODE('0001', 'abc'), 'abc')
, UNHEX(DECODE(ENCODE('0001', 'abc'), 'abc'))
, ENCODE('0001','abc')
, DECODE('fe5ab21a', 'abc')
, UNHEX(DECODE('fe5ab21a', 'abc'))
, HEX('0001')
结果:
1
30303031
0001
fe5ab21a
68d357a7005dcbe0
NULL
30303031
据我所知,您想制作一个与您的 ID 相关联的简短唯一密钥传递。
小心这种加密方式,如果有人想破解它,不到几分钟的时间,它真的很弱。但是如果只是为了某些人没有安全风险的混淆,没问题。
为了提高一点安全性(但会降低用户体验),尝试使用AES_ENCRYPT()
您的代码的错误在于您没有强制使用 input/output 的类型,这里是正确输入的内容。
MySQL 5.6 架构设置:
CREATE TABLE t
(`id` int, `name` varchar(7))
;
INSERT INTO t
(`id`, `name`)
VALUES
(1, 'hello'),
(2, 'hola'),
(3, 'bonjour')
;
查询 1:
select *, ENCODE(id,'KEY') as encrypted_id from t
| id | name | encrypted_id |
|----|---------|--------------|
| 1 | hello | Vw== |
| 2 | hola | yw== |
| 3 | bonjour | iA== |
查询 2:
SELECT * from t where id = CAST(DECODE(FROM_BASE64('yw=='),'KEY') AS CHAR(50))
| id | name |
|----|------|
| 2 | hola |