Amazon web services 如何在aws上存储加密密钥?
我正在开发运行在ec2服务上的RESTAPI系统 我的要求是Amazon web services 如何在aws上存储加密密钥?,amazon-web-services,encryption,cryptography,Amazon Web Services,Encryption,Cryptography,我正在开发运行在ec2服务上的RESTAPI系统 我的要求是 使用AES256对纯文本进行加密/解密 使用pbkdf2生成密钥 在aws云系统上存储密钥 爪哇 我尝试使用KMS和Crypto sdk,但它不起作用。(ex)每次调用具有相同明文的方法时,加密值的结果都会发生变化 你有什么想法吗 public String encrypt(String text) { String plaintext = text; try { ByteBuffer byteBuff
public String encrypt(String text) {
String plaintext = text;
try {
ByteBuffer byteBuffer = getByteBuffer(plaintext);
EncryptRequest encryptRequest = new EncryptRequest().withKeyId(key_arn).withPlaintext(byteBuffer);
EncryptResult encryptResult = client.encrypt(encryptRequest);
String ciphertext = getString(java.util.Base64.getEncoder().encode(encryptResult.getCiphertextBlob()));
plaintext = ciphertext;
} catch (Exception e) {
e.printStackTrace();
}
return plaintext;
}
public String decrypt(String text) {
String bb = null;
try {
byte[] ciphertextBytes = text.getBytes();
DecryptRequest request = new DecryptRequest();
request.setCiphertextBlob(ByteBuffer.wrap(ciphertextBytes));
DecryptResult result = client.decrypt(request);
// Convert to byte array
byte[] plaintext = new byte[result.getPlaintext().remaining()];
ByteBuffer a = result.getPlaintext().get(plaintext);
bb = getString(a);
} catch (Exception e) {
e.printStackTrace();
}
return bb;
}
这是一个很难简明扼要地回答的问题,因为加密和正确使用AWS加密功能有很多细节和背景知识 首先是您的具体问题-同一明文中的不同值是可以接受的
Encrypt
为同一纯文本返回不同的值,因为它将附加的数据附加到纯文本,例如初始化向量(IV)
。这是一种将非确定性数据精确地包含在纯文本中的方法,这样当使用同一密钥时,就不会得到来自同一纯文本的完全相同的密码文本
但更重要的是,请注意,加密
和解密
是而不是通用工具-它们设计用于处理小型有效负载(<8KB),特别是数据密钥
。因此,从这里开始将取决于加密的数据类型。如果您只需要解密一个小值(如密码),您可以继续使用加密/解密
,并且不用担心两个加密
操作会产生不同的密码文本。如果需要加密文件或其他任意数据块,请继续阅读
AWS推广了信封加密
的概念,即用于实际加密/解密的密钥与它所保护的数据一起存储,并且本身通过单独的主密钥加密/解密。在AWS的情况下,这是客户主密钥(CMK)
,它永远不会离开KMS
因此,您可以使用Encrypt
对生成的加密密钥进行加密,也可以使用AWS方法generatedtakey
为您1)创建密钥并对其进行加密。这将返回密钥的明文(base64)和密文版本。使用内存中的明文,将密文存储到磁盘
更典型的工作流程如下所示:
- 调用
-您需要指定generatedtakey
和KeyId
(keypec
或AES_128
)。还可以选择生成非对称密钥AES_256
- 结果包括生成密钥的纯文本和加密版本。存储加密版本
- 稍后需要使用密钥时,请调用
Decrypt
- 使用
方法中的明文作为本地密码中的密钥Decrypt
- 这是一个很难简明扼要回答的问题,因为加密和正确使用AWS加密功能有很多细节和背景知识
首先是您的具体问题-同一明文中的不同值是可以接受的
Encrypt
为同一纯文本返回不同的值,因为它将附加的数据附加到纯文本,例如初始化向量(IV)
。这是一种将非确定性数据精确地包含在纯文本中的方法,这样当使用同一密钥时,就不会得到来自同一纯文本的完全相同的密码文本
但更重要的是,请注意,加密
和解密
是而不是通用工具-它们设计用于处理小型有效负载(<8KB),特别是数据密钥
。因此,从这里开始将取决于加密的数据类型。如果您只需要解密一个小值(如密码),您可以继续使用加密/解密
,并且不用担心两个加密
操作会产生不同的密码文本。如果需要加密文件或其他任意数据块,请继续阅读
AWS推广了信封加密
的概念,即用于实际加密/解密的密钥与它所保护的数据一起存储,并且本身通过单独的主密钥加密/解密。在AWS的情况下,这是客户主密钥(CMK)
,它永远不会离开KMS
因此,您可以使用Encrypt
对生成的加密密钥进行加密,也可以使用AWS方法generatedtakey
为您1)创建密钥并对其进行加密。这将返回密钥的明文(base64)和密文版本。使用内存中的明文,将密文存储到磁盘
更典型的工作流程如下所示:
- 调用
-您需要指定generatedtakey
和KeyId
(keypec
或AES_128
)。还可以选择生成非对称密钥AES_256
- 结果包括生成密钥的纯文本和加密版本。存储加密版本
- 稍后需要使用密钥时,请调用
Decrypt
- 使用
方法中的明文作为本地密码中的密钥Decrypt