1.在线加密和解密(适用于小数据量)
如果需要加密的数据量较小(小于6KB),可以直接通过KMS的在线加密和解密功能完成。
操作步骤:
创建用户主密钥(CMK):
登录阿里云KMS控制台,创建一个新的用户主密钥(CMK),用于加密和解密数据。
可以为CMK设置别名,方便后续引用。
加密数据:
调用KMS的Encrypt接口,将明文数据加密为密文。可以使用KMS提供的SDK或API完成操作。
示例代码(Python):
fromaliyunsdkcoreimportclient
fromaliyunsdkkms.request.v20160120importEncryptRequest
clt=client.AcsClient('','','<RegionId>')
request=EncryptRequest.EncryptRequest()
request.set_accept_format('JSON')
request.set_Plaintext('需要加密的明文数据')
request.set_KeyId('<CMK的ID或别名>')
response=clt.do_action_with_exception(request)
ciphertext=response['CiphertextBlob']
解密数据:
调用KMS的Decrypt接口,将密文数据解密为明文。
示例代码(Python):
fromaliyunsdkkms.request.v20160120importDecryptRequest
request=DecryptRequest.DecryptRequest()
request.set_accept_format('JSON')
request.set_CiphertextBlob('<密文数据>')
response=clt.do_action_with_exception(request)
plaintext=response['Plaintext']
2.信封加密(适用于大数据量)
如果需要加密的数据量较大,可以使用KMS的信封加密功能。
操作步骤:
创建用户主密钥(CMK):
在KMS控制台创建一个用户主密钥(CMK),用于生成数据密钥。
生成数据密钥:
调用GenerateDataKey接口,使用CMK生成一个数据密钥。KMS会返回数据密钥的明文和密文。
示例代码(Python):
fromaliyunsdkkms.request.v20160120importGenerateDataKeyRequest
request=GenerateDataKeyRequest.GenerateDataKeyRequest()
request.set_accept_format('JSON')
request.set_KeyId('<CMK的ID或别名>')
request.set_NumberOfBytes(32)#数据密钥长度
response=clt.do_action_with_exception(request)
datakey_plaintext=response['Plaintext']
datakey_encrypted=response['CiphertextBlob']
本地加密数据:
使用生成的数据密钥明文在本地加密数据,然后销毁内存中的明文密钥。
示例代码(Python):
fromCrypto.CipherimportAES
importbase64
cipher=AES.new(base64.b64decode(datakey_plaintext),AES.MODE_EAX)
ciphertext,tag=cipher.encrypt_and_digest(b'需要加密的数据')
存储密文数据和密文数据密钥:
将密文数据和密文数据密钥一同存储到持久化存储设备中。
解密数据:
使用KMS的Decrypt接口解密数据密钥,获取明文数据密钥。
使用明文数据密钥解密本地数据,然后销毁内存中的明文密钥。
示例代码(Python):
request=DecryptRequest.DecryptRequest()
request.set_accept_format('JSON')
request.set_CiphertextBlob(datakey_encrypted)
response=clt.do_action_with_exception(request)
datakey_plaintext=response['Plaintext']
cipher=AES.new(base64.b64decode(datakey_plaintext),AES.MODE_EAX,nonce=nonce)
plaintext=cipher.decrypt_and_verify(ciphertext,tag)
3.注意事项
密钥管理:定期轮换密钥,确保密钥的安全性。
性能优化:对于大数据量,信封加密模式可以减少网络传输开销。
合规性:确保加密操作符合相关法律法规和行业标准。