MySQL企业加密函数有这些一般特征:
对于错误类型的参数或不正确数量的参数,每个函数都会返回一个错误。
如果参数不适合允许函数执行所请求的操作,则返回
零
或者0。例如,如果函数不支持指定的算法,密钥长度过短或过长,或PEM格式的密钥字符串不是有效的密钥,就会发生这种情况。(OpenSSL强加了自己的密钥长度限制,服务器管理员可以通过设置环境变量对最大密钥长度施加额外限制。看到第6.6.2节,“MySQL企业加密使用和示例”.)底层SSL库负责随机初始化。
有几个函数接受加密算法参数。下表按功能总结了支持的算法。
表6.37各函数支持的算法
函数 | 支持算法 |
---|---|
asymmetric_decrypt () |
RSA |
asymmetric_derive () |
DH |
asymmetric_encrypt () |
RSA |
asymmetric_sign () |
RSA、DSA |
asymmetric_verify () |
RSA、DSA |
create_asymmetric_priv_key () |
Rsa dsa dh |
create_asymmetric_pub_key () |
Rsa dsa dh |
create_dh_parameters () |
DH |
虽然您可以使用任何RSA、DSA或DH加密算法创建密钥,但其他接受密钥参数的函数可能只接受某些类型的密钥。例如,asymmetric_encrypt ()
而且asymmetric_decrypt ()
只接受RSA密钥。
下面描述了MySQL企业加密函数的调用序列。有关其他示例和讨论,请参见第6.6.2节,“MySQL企业加密使用和示例”.
asymmetric_decrypt (
算法
,crypt_str
,key_str
)使用给定的算法和密钥字符串解密加密字符串,并将结果明文作为二进制字符串返回。如果解密失败,结果是
零
.key_str
必须是PEM格式的有效密钥字符串。为了成功解密,它必须是与所使用的私钥或公钥字符串相对应的公钥或私钥字符串asymmetric_encrypt ()
生成加密的字符串。算法
创建密钥时使用的加密算法。支持
算法
价值观:RSA的
使用示例请参见
asymmetric_encrypt ()
.asymmetric_derive (
pub_key_str
,priv_key_str
)使用一方的私钥和另一方的公钥派生对称密钥,并将结果密钥作为二进制字符串返回。如果密钥推导失败,则结果为
零
.pub_key_str
而且priv_key_str
必须是PEM格式的有效密钥字符串。必须使用DH算法创建。假设你有两对公钥和私钥:
SET @dhp = create_dh_parameters(1024);SET @priv1 = create_asymmetric_priv_key('DH', @dhp);SET @pub1 = create_asymmetric_pub_key('DH', @priv1);SET @priv2 = create_asymmetric_priv_key('DH', @dhp);SET @pub2 = create_asymmetric_pub_key('DH', @priv2);
进一步假设您使用来自一对的私钥和来自另一对的公钥来创建一个对称密钥字符串。那么这个对称键标识关系成立:
asymmetric_derived (@pub1, @priv2) = asymmetric_derived (@pub2, @priv1)
asymmetric_encrypt (
算法
,str
,key_str
)使用给定的算法和密钥字符串加密字符串,并以二进制字符串的形式返回结果密文。如果加密失败,结果是
零
.的
str
长度不能大于key_str
长度−11,单位为字节key_str
必须是PEM格式的有效密钥字符串。算法
创建密钥时使用的加密算法。支持
算法
价值观:RSA的
若要加密字符串,请将私钥或公钥字符串传递给
asymmetric_encrypt ()
.若要恢复原始的未加密字符串,请将加密字符串传递给asymmetric_decrypt ()
,以及与用于加密的私钥或公钥字符串对应的公钥或私钥字符串。——生成私钥/公钥对SET @priv = create_asymmetric_priv_key('RSA', 1024);SET @pub = create_asymmetric_pub_key('RSA', @priv);——用私钥加密,用公钥解密SET @ciphertext = asymmetric_encrypt('RSA', 'The quick brown fox', @priv);SET @明文=不对称解密('RSA', @密文,@pub);——使用公钥加密,使用私钥解密SET @密文= asymmetric_encrypt('RSA', 'The quick brown fox', @pub);SET @明文=不对称解密('RSA', @密文,@priv);
假设:
SET @priv =有效的PEM格式的RSA私钥字符串。SET @pub =对应的PEM格式的RSA公钥字符串
那么这些身份关系就成立了:
asymmetric_decrypt('RSA', asymmetric_encrypt('RSA', @s, @priv), @pub) = @s
asymmetric_sign (
算法
,digest_str
,priv_key_str
,digest_type
)使用私钥字符串签署摘要字符串,并以二进制字符串的形式返回签名。如果签名失败,结果为
零
.digest_str
摘要字符串。它可以通过调用来生成create_digest ()
.digest_type
指示用于生成摘要字符串的摘要算法。priv_key_str
用于对摘要字符串签名的私钥字符串。必须是PEM格式的有效密钥字符串。算法
创建密钥时使用的加密算法。支持
算法
价值观:RSA的
,DSA的
支持
digest_type
价值观:“SHA224”
,“SHA256”
,“SHA384”
,“SHA512”
使用示例请参见
asymmetric_verify ()
.asymmetric_verify (
算法
,digest_str
,sig_str
,pub_key_str
,digest_type
)验证签名字符串是否与摘要字符串匹配,并返回1或0表示验证成功或失败。
digest_str
摘要字符串。它可以通过调用来生成create_digest ()
.digest_type
指示用于生成摘要字符串的摘要算法。sig_str
签名字符串。它可以通过调用来生成asymmetric_sign ()
.pub_key_str
签名者的公钥字符串。它对应于传递给的私钥asymmetric_sign ()
生成签名字符串,且必须是PEM格式的有效密钥字符串。算法
创建密钥时使用的加密算法。支持
算法
价值观:RSA的
,DSA的
支持
digest_type
价值观:“SHA224”
,“SHA256”
,“SHA384”
,“SHA512”
——设置加密算法和摘要类型Set @算法= 'RSA';SET @dig_type = 'SHA224';——创建私钥/公钥对SET @priv = create_asymmetric_priv_key(@算法,1024);SET @pub = create_asymmetric_pub_key(@算法,@priv);——从字符串SET @dig = create_digest(@dig_type, 'The quick brown fox');——针对摘要SET @sig = asymmetric_sign(@算法,@dig, @priv, @dig_type);SET @verf = asymmetric_verify(@算法,@dig, @sig, @pub, @dig_type);
create_asymmetric_priv_key (
算法
,{key_len
|dh_secret
})使用给定的算法和密钥长度或DH秘密创建一个私钥,并以PEM格式的二进制字符串返回密钥。如果密钥生成失败,则结果为
零
.支持
算法
价值观:RSA的
,DSA的
,“DH”
支持
key_len
values:最小密钥长度(以比特为单位)为1024。最大密钥长度取决于算法:RSA为16,384,DSA为10,000。这些键长度限制是由OpenSSL施加的约束。服务器管理员可以通过设置环境变量对最大密钥长度施加额外限制。看到第6.6.2节,“MySQL企业加密使用和示例”.对于DH密钥,传递一个共享的DH密钥,而不是密钥长度。要创建密钥,请将密钥长度传递给
create_dh_parameters ()
.这个例子创建了一个2048位的DSA私钥,然后从私钥派生出一个公钥:
SET @priv = create_asymmetric_priv_key('DSA', 2048);SET @pub = create_asymmetric_pub_key('DSA', @priv);
生成DH密钥举例请参见章节的描述
asymmetric_derive ()
.选择密钥长度和加密算法时的一些一般考虑因素:
私钥和公钥的加密强度随着密钥大小的增加而增加,但生成密钥的时间也会增加。
生成DH密钥的时间比生成RSA或RSA密钥的时间长。
非对称加密函数比对称加密函数速度慢。如果性能是一个重要因素,并且函数要经常使用,那么最好使用对称加密。例如,考虑使用
AES_ENCRYPT ()
而且AES_DECRYPT ()
.
create_asymmetric_pub_key (
算法
,priv_key_str
)使用给定的算法从给定的私钥派生一个公钥,并以PEM格式的二进制字符串返回该密钥。如果密钥推导失败,则结果为
零
.priv_key_str
必须是PEM格式的有效密钥字符串。算法
创建密钥时使用的加密算法。支持
算法
价值观:RSA的
,DSA的
,“DH”
使用示例请参见
create_asymmetric_priv_key ()
.create_dh_parameters (
key_len
)创建用于生成DH私钥/公钥对的共享密钥,并返回可传递给的二进制字符串
create_asymmetric_priv_key ()
.如果秘密生成失败,结果为null。支持
key_len
values:最小键长1024位,最大键长10000位。这些键长度限制是由OpenSSL施加的约束。服务器管理员可以通过设置环境变量对最大密钥长度施加额外限制。看到第6.6.2节,“MySQL企业加密使用和示例”.有关如何使用返回值生成对称键的示例,请参见
asymmetric_derive ()
.SET @dhp = create_dh_parameters(1024);
create_digest (
digest_type
,str
)使用给定摘要类型从给定字符串创建摘要,并以二进制字符串的形式返回摘要。如果摘要生成失败,则结果为
零
.支持
digest_type
价值观:“SHA224”
,“SHA256”
,“SHA384”
,“SHA512”
SET @dig = create_digest('SHA512', The quick brown fox');
生成的摘要字符串适合用于
asymmetric_sign ()
而且asymmetric_verify ()
.