Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 如何在aws上存储加密密钥?_Amazon Web Services_Encryption_Cryptography - Fatal编程技术网

Amazon web services 如何在aws上存储加密密钥?

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

我正在开发运行在ec2服务上的RESTAPI系统

我的要求是

  • 使用AES256对纯文本进行加密/解密
  • 使用pbkdf2生成密钥
  • 在aws云系统上存储密钥
  • 爪哇
  • 我尝试使用KMS和Crypto sdk,但它不起作用。(ex)每次调用具有相同明文的方法时,加密值的结果都会发生变化

    你有什么想法吗

    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实际上提供了一个单独的库来为您完成所有这些工作—AWS加密SDK,支持包括Java在内的一系列语言。我没有广泛使用它,但它提供了通过最佳实践(哪种算法、主密钥与数据密钥等)进行信封加密的框架。看看(下面的链接)

    希望这有帮助;加密很难做到正确

    有关更多信息:


      • 这是一个很难简明扼要回答的问题,因为加密和正确使用AWS加密功能有很多细节和背景知识

        首先是您的具体问题-同一明文中的不同值是可以接受的
        Encrypt
        为同一纯文本返回不同的值,因为它将附加的数据附加到纯文本,例如
        初始化向量(IV)
        。这是一种将非确定性数据精确地包含在纯文本中的方法,这样当使用同一密钥时,就不会得到来自同一纯文本的完全相同的密码文本

        但更重要的是,请注意,
        加密
        解密
        而不是通用工具-它们设计用于处理小型有效负载(<8KB),特别是
        数据密钥
        。因此,从这里开始将取决于加密的数据类型。如果您只需要解密一个小值(如密码),您可以继续使用
        加密/解密
        ,并且不用担心两个
        加密
        操作会产生不同的密码文本。如果需要加密文件或其他任意数据块,请继续阅读

        AWS推广了
        信封加密
        的概念,即用于实际加密/解密的密钥与它所保护的数据一起存储,并且本身通过单独的主密钥加密/解密。在AWS的情况下,这是
        客户主密钥(CMK)
        ,它永远不会离开KMS

        因此,您可以使用
        Encrypt
        对生成的加密密钥进行加密,也可以使用AWS方法
        generatedtakey
        为您1)创建密钥并对其进行加密。这将返回密钥的明文(base64)和密文版本。使用内存中的明文,将密文存储到磁盘

        更典型的工作流程如下所示:

        • 调用
          generatedtakey
          -您需要指定
          KeyId
          keypec
          AES_128
          AES_256
          )。还可以选择生成非对称密钥
        • 结果包括生成密钥的纯文本和加密版本。存储加密版本
        • 稍后需要使用密钥时,请调用
          Decrypt
        • 使用
          Decrypt
          方法中的明文作为本地密码中的密钥
        AWS实际上提供了一个单独的库来为您完成所有这些工作—AWS加密SDK,支持包括Jav在内的一系列语言