【问题标题】:File is not encrypting in Aws s3 server side encryption (Customer provided Key) Android文件未在 Aws s3 服务器端加密(客户提供的密钥)Android 中加密
【发布时间】:2022-01-25 04:20:29
【问题描述】:

我正在尝试使用自定义密钥在亚马逊中实现加密,我根据文档提及在标题中提供这 3 个值

objectMetadata.setHeader("x-amz-server-side-encryption-customer-algorithm", ObjectMetadata.AES_256_SERVER_SIDE_ENCRYPTION)
objectMetadata.setHeader("x-amz-server-side-encryption-customer-key", key2)
objectMetadata.setHeader("x-amz-server-side-encryption-customer-key-MD5", md5)

标头中需要这 3 个值,但它不会在亚马逊服务器上加密文件,我正在通过此代码生成客户密钥和 md5 密钥

    @Throws(Exception::class)
fun encrypt(
    plaintext: ByteArray?,
    password:  CharArray,
    key: SecretKey,
    IV: ByteArray?,
    salt: ByteArray
): ByteArray? {
    val cipher = Cipher.getInstance("AES")
    val pbKeySpec = PBEKeySpec(password, salt, 1324, 256)
    val secretKeyFactory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1")
    val keyBytes = secretKeyFactory.generateSecret(pbKeySpec).encoded
    val keySpec = SecretKeySpec(keyBytes, "AES")
    val ivSpec = IvParameterSpec(IV)
    cipher.init(Cipher.ENCRYPT_MODE, keySpec, ivSpec)
    return cipher.doFinal(plaintext)
}
val key2 = Base64.getEncoder().encodeToString(encrypt(utf8, chr, key, iv, salt)) // This is how am calling the function and making base64 customer key

然后对于 md5 使用此代码创建 md5 密钥

 val md = MessageDigest.getInstance("MD5")

 Files.newInputStream(Paths.get(files[j].path)).use { `is` ->
      DigestInputStream(`is`, md).use { }
 }

 val digest: ByteArray = md.digest(files[j].path.encodeToByteArray())
 val md5 = Base64.getEncoder().encodeToString(digest)

文件已成功上传到 aws 服务器,但文件未加密,我似乎无法弄清楚是什么问题

【问题讨论】:

  • 我想知道如何检查文件是否加密。如果您使用拥有 KMS 密钥的所有权利并进行解密的帐户进入您的存储桶,那么与没有加密的情况相比,您不会看到任何不同的东西。为了检查对象是否被加密,您必须进入对象属性并检查是否启用了Server-side encryption settings,或者担任没有解密对象所需权限的角色。
  • @Ervin 感谢您的回复。是的,服务器端加密已启用
  • 基本上我会尝试使用其 aes base64 编码密钥下载文件。从。网络后端。它没有提供密钥下载,但它成功下载并在不提供密钥时打开。
  • 同时我正在提供 aws s3 服务器的密钥。

标签: android amazon-web-services amazon-s3 aes awss3transferutility


【解决方案1】:

您是否在标题中正确添加了这 3 个键?

objectMetadata.setHeader("x-amz-server-side-encryption-customer-algorithm", ObjectMetadata.AES_256_SERVER_SIDE_ENCRYPTION)
objectMetadata.setHeader("x-amz-server-side-encryption-customer-key", key2)
objectMetadata.setHeader("x-amz-server-side-encryption-customer-key-MD5", md5)

【讨论】:

  • 是的。标题及其值是正确的
  • 那么这一定是AWS方面的问题
猜你喜欢
  • 2020-12-04
  • 2017-02-03
  • 2021-01-02
  • 2016-05-27
  • 1970-01-01
  • 2020-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多