0

使用 aws 弹性转码器对我的音频文件进行转码时,我选择了“无存储”。现在我有加密密钥 - xxxxxxxxxxxxxxxxxx 加密密钥 MD5- xxxxxxxxxxxxx 加密初始化向量 -xxxxxxxxxx

所以我使用 awskms 使用此代码解密加密密钥

public ByteBuffer decryptAes(String aes) {

    Map<String, String> enccontext = new HashMap<>();
    enccontext.put("service", "elastictranscoder.amazonaws.com");
    ByteBuffer encrypted = getBytebuffer(Base64.getDecoder().decode(aes));

    DecryptRequest reqq = new DecryptRequest().withCiphertextBlob(encrypted).withEncryptionContext(enccontext);

    ByteBuffer buf = awskms.decrypt(reqq).withKeyId(keyId).getPlaintext();

    return buf;
}

我有一个 m3u8 文件,其密钥为 #EXT-X-KEY:METHOD=AES-128,URI="https://[mysite]/api/public/amazoncode",IV=0xdbe2882930b143e62b3e6e587a2269f8

所以我的困惑是如何将解密密钥发送到 m3u8?,到目前为止我有这个,但它似乎不起作用

// this is the endpoint for https://[mysite]/api/public/amazoncode
@GetMapping(value = "amazoncode")
public ByteBuffer getAmazonCode(){

   return amazonClient.decryptAes([the encryption code that i got from amazon]);
}

那么发送解密的字节缓冲区以便我的 m3u8 可以通过从我的端点获取解密数据密钥开始播放的适当响应体是什么?

4

1 回答 1

0

对于遇到与我相同的问题的任何人,我在一段时间后就弄清楚了,我所要做的就是在获取 byteBuffer 之后,将其转换为输入流并从中创建一个密钥文件。并使其可通过许可证获取 URL 下载。这是代码:

         @GetMapping(value = "amazoncode",produces = MediaType.APPLICATION_OCTET_STREAM)
public void getAmazonCode( HttpServletResponse response){
    response.setHeader("Content-Disposition", "attachment; filename=\"mmm.key\"");
    response.setContentType("application/key");
       //this will return the decrypted data key 
       ByteBuffer b =amazonClient.decryptAes([the encryption key]);
    InputStream targetStream = new ByteArrayInputStream(b.array());
    try {
        IOUtils.copy(targetStream, response.getOutputStream());
    }catch (Exception e){
        System.out.println(e);
    }

现在它就像一个魅力。

于 2020-09-11T17:39:49.500 回答