要在应用程序中使用 MySQL 企业加密,请调用适合您要执行的操作的函数。本节演示如何执行一些代表性任务。
在 MySQL 8.0.30 之前的版本中,MySQL 企业加密的函数基于 openssl_udf
共享库。从 MySQL 8.0.30 开始,函数由 MySQL 组件 component_enterprise_encryption
提供。在某些情况下,组件函数的行为与遗留函数的行为不同。有关差异的列表,请参阅 升级 MySQL 企业加密。有关每个组件函数的行为的完整详细信息,请参阅 第 8.6.4 节,“MySQL 企业加密函数参考”。
如果您安装了遗留函数,然后升级到 MySQL 8.0.30 或更高版本,则您创建的函数将保持可用、受支持并继续以相同的方式工作。然而,它们从 MySQL 8.0.30 起被弃用,建议您安装 MySQL 企业加密组件 component_enterprise_encryption
。有关升级的说明,请参阅 从 MySQL 8.0.30 安装。
在选择密钥长度和加密算法时,以下一般考虑事项适用:
-
私钥和公钥的加密强度随着密钥大小的增加而增加,但密钥生成时间也随之增加。
-
对于遗留函数,DH 密钥的生成时间远远长于 RSA 或 DSA 密钥。从 MySQL 8.0.30 起,组件函数仅支持 RSA 密钥。
-
非对称加密函数消耗的资源比对称加密函数多。它们适合加密小量数据和创建和验证签名。对于加密大量数据,symmetric 加密函数速度更快。MySQL Server 提供了
AES_ENCRYPT()
和AES_DECRYPT()
函数用于对称加密。
密钥字符串值可以在运行时创建并存储到变量或表中,使用 SET
、SELECT
或 INSERT
。这个示例适用于组件函数和遗留函数:
SET @priv1 = create_asymmetric_priv_key('RSA', 2048);
SELECT create_asymmetric_priv_key('RSA', 2048) INTO @priv2;
INSERT INTO t (key_col) VALUES(create_asymmetric_priv_key('RSA', 1024));
存储在文件中的密钥字符串值可以使用 LOAD_FILE()
函数由具有 FILE
权限的用户读取。摘要和签名字符串可以以类似的方式处理。
这个示例适用于组件函数和遗留函数:
-- Encryption algorithm
SET @algo = 'RSA';
-- Key length in bits; make larger for stronger keys
SET @key_len = 2048;
-- Create private key
SET @priv = create_asymmetric_priv_key(@algo, @key_len);
-- Derive corresponding public key from private key, using same algorithm
SET @pub = create_asymmetric_pub_key(@algo, @priv);
您可以使用密钥对来加密和解密数据或签名和验证数据。
这个示例适用于组件函数和遗留函数。在这两种情况下,密钥对的成员必须是 RSA 密钥:
SET @ciphertext = asymmetric_encrypt(@algo, 'My secret text', @pub);
SET @plaintext = asymmetric_decrypt(@algo, @ciphertext, @priv);
这个示例适用于组件函数和遗留函数:
-- Digest type
SET @dig_type = 'SHA512';
-- Generate digest string
SET @dig = create_digest(@dig_type, 'My text to digest');
密钥对可以用于签名数据,然后验证签名是否与摘要匹配。这个示例适用于组件函数和遗留函数:
-- Encryption algorithm; keys must
-- have been created using same algorithm
SET @algo = 'RSA';
–- Digest algorithm to sign the data
SET @dig_type = 'SHA512';
-- Generate signature for digest and verify signature against digest
SET @sig = asymmetric_sign(@algo, @dig, @priv, @dig_type);
-- Verify signature against digest
SET @verf = asymmetric_verify(@algo, @dig, @sig, @pub, @dig_type);
对于遗留函数,签名需要摘要。对于组件函数,签名不需要摘要,可以使用任何数据字符串。这些函数中的摘要类型是指用于签名数据的算法,而不是用于创建原始输入的算法。这个示例是针对组件函数的:
-- Encryption algorithm; keys must
-- have been created using same algorithm
SET @algo = 'RSA';
–- Arbitrary text string for signature
SET @text = repeat('j', 256);
–- Digest algorithm to sign the data
SET @dig_type = 'SHA512';
-- Generate signature for digest and verify signature against digest
SET @sig = asymmetric_sign(@algo, @text, @priv, @dig_type);
-- Verify signature against digest
SET @verf = asymmetric_verify(@algo, @text, @sig, @pub, @dig_type);