我想知道MySQL 8中AES_ENCRYPT和AES_DECRYPT的正确实现。
我有一个表,其中包含字段ownerId
VARCHAR(16)和ownerPassword
(BLOB)。
1。我们使用MySQL 01_tblCompany
函数将记录插入表中 AES_ENCRYPT()
,如下所示对ownerPassword
字段进行加密:
INSERT INTO 01_tblCompany (ownerId, ownerPassword) VALUES ('owner001', AES_ENCRYPT('password123', 'privateKey'));
2。我们使用MySQL 01_tblCompany
函数从表中选择该记录 AES_DECRYPT()
,如下所示解密ownerPassword
字段:
SELECT AES_DECRYPT(ownerPassword, 'privateKey') AS ownerPassword FROM 01_tblCompany WHERE ownerId = 'owner001';
MySQL page for the AES Encryption function 指出您不应该只将纯文本privateKey传递给key_str
参数,而
将密钥传递给key_str参数的最安全方法是创建 一个真正随机的128位值,并将其作为二进制值传递。
我认为那是我的头发开始冒烟的时候,我希望有人能展示出正确实施的完整例子吗?
答案 0 :(得分:0)
好的。这就是我们通过MySQL默认的app.post('/', cors(corsOptions), function (req, res, next) {
res.json({ msg: 'This is CORS-enabled for a whitelisted domain POST request' })
})
,AES_ENCRYPT()
使用AES_DECRYPT()
和block_encryption_mode
插入和选择字段的方式。
aes-128-ecb
变量控制块加密模式。
默认设置为block_encryption_mode
。 ECB模式对数据库很有用,因为它不需要IV,因此存在1:1密文:纯文本关系。
请注意,我们从未真正使用 aes-128-ecb
来解密存储在数据库中的密码。您应该对用户密码了解为零。
我们改为使用正确的密码对用户的输入尝试进行加密。
如果两个加密值都匹配,那么我们就成功登录了。
AES_DECRYPT()