加密mysql表中已经存在的数据

时间:2018-10-06 13:28:21

标签: mysql sql

目前,我的数据库中大约有2000行,以前的结构是varchar(200)。此后,我将结构更改为varbinary。

现在,当我将数据插入表中时,我将使用

AES_ENCRYPT('Obama', 'sadhjksauejs') (just an example)

无论如何,我想对数据库中当前存在的所有数据使用AES_ENCRYPT,因此获取数据,对其进行加密并将其放回数据库中,而不会丢失原始数据。

对当前存在的所有数据进行AES_ENCRYPT的最佳方法是什么?

2 个答案:

答案 0 :(得分:0)

首先,您必须在表encryptedText中创建新字段。

UPDATE table SET encryptedText = AES_ENCRYPT(textField,'sadhjksauejs');

答案 1 :(得分:0)

这里需要注意几件事...

是的,VARBINARY是适当的数据类型,但是AES_ENCRYPT是基于块的,它将把您的纯文本填充到必要的长度,因此您的密文可能会比原始文本更长。 documentation给出了用于计算正确列大小的信息:

  

16 *(trunc(string_length / 16)+1)

您应该检查该列的长度是否足以容纳要存储的任何值。

第二,由于您已经以加密形式添加新记录,因此需要确保将update语句限制为仅保留那些纯文本记录。

一旦考虑了这些因素(并假设使用某些id或创建的列),您的UPDATE语句将看起来像这样

UPDATE `yr_table` SET `col1` = AES_ENCRYPT(`col1`,'sadhjksauejs'),
`col2` = AES_ENCRYPT(`col2`,'sadhjksauejs') 
WHERE `id` > whatever;

(即与@Sa​​dikhasan的建议相同)