目前,我的数据库中大约有2000行,以前的结构是varchar(200)。此后,我将结构更改为varbinary。
现在,当我将数据插入表中时,我将使用
AES_ENCRYPT('Obama', 'sadhjksauejs') (just an example)
无论如何,我想对数据库中当前存在的所有数据使用AES_ENCRYPT
,因此获取数据,对其进行加密并将其放回数据库中,而不会丢失原始数据。
对当前存在的所有数据进行AES_ENCRYPT
的最佳方法是什么?
答案 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;
(即与@Sadikhasan的建议相同)