gpt4 book ai didi

MySQL 加密

转载 作者:行者123 更新时间:2023-11-29 06:40:34 32 4
gpt4 key购买 nike

我正在尝试加密 MySQL 上的某些字段。我正在使用 TPC-DSv2.8 版本,并尝试在客户地址表的某些列上使用 AES。知道如何加密字段的所有行吗?我尝试使用

UPDATE customer SET c_first_name = AES_ENCRYPT(c_first_name, key)

但我收到一条错误消息,指出第 1 行的 c_first_name 列的数据太长

最佳答案

documentation建议将加密值存储在 VARBINARY 和 BLOB 类型列中,并提供以下内容以计算使用 AES_ENCRYPT() 时所需的列大小。

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

'string_length' 是存储字符串所需的字节数,而不是字符数,这取决于您使用的字符集。您将在 information_schema 中以 character_octet_length 形式获取此信息。columns

如果您使用 utf8mb4 作为字符集,则您的 VARCHAR(12) c_first_name 列的 character_octet_length 将为 48,并且您需要 VARBINARY(64) 来容纳任何可能的值。

mysql> SELECT 16 * (TRUNCATE(48 / 16, 0) + 1);
+---------------------------------+
| 16 * (TRUNCATE(48 / 16, 0) + 1) |
+---------------------------------+
| 64 |
+---------------------------------+

例如

mysql> SELECT LENGTH(AES_ENCRYPT(_utf8mb4'💩💩💩💩💩💩💩💩💩💩💩💩','salt')) AS v arbinary_length;
+------------------+
| varbinary_length |
+------------------+
| 64 |
+------------------+

您可以使用它来获取客户表所需的 VARBINARY 列大小

SELECT `column_name`, `character_set_name`, `column_type`, `character_octet_length`,
16 * (TRUNCATE(`character_octet_length` / 16, 0) + 1) AS varbinary_size
FROM `information_schema`.`columns`
WHERE `table_name` = 'customer';

关于MySQL 加密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51801746/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com