我需要以这样一种方式保存id,使其加密,这样才能占用8个字符。 我使用以下命令做到了:
SELECT encode(LPAD(id,4,0),'abc')
此命令将变为id = 1 进入0001然后将其变成代码fe5ab21a
如何解密此代码?
以下是选择及其生成结果的示例
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
答案 0 :(得分:1)
据我了解,您希望将其作为与您的某个ID相关联的简短唯一密钥传递。
请注意这种加密方式,如果有人想要破解它,它会花费不到几分钟的时间,而且非常弱。但是如果它&#39 ;只有在没有安全风险的情况下进行某些混淆,这没关系。
要提高安全性(但会降低用户体验),请尝试使用AES_ENCRYPT()
您的代码的错误在于您不会强制输入/输出类型,这是正确输入的内容。
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
<强> Results 强>:
| 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))
<强> Results 强>:
| id | name |
|----|------|
| 2 | hola |