
{"alg": "HS256","typ": "JWT"}
{"type": "DrmToken","appId": 1500014561,"fileId": "387702307091793695","currentTimeStamp": 1650964374,"expireTimeStamp": 2147483647,"random": 4220003655,"protectSchema": "sha256","issuer": "client"}
매개변수 | 유형 | 필수 여부 | 설명 |
type | string | Yes | 서명 유형. DrmToken을 입력합니다. |
appId | int64 | Yes | AppId. |
fileId | string | Yes | 파일 Id. |
issuer | string | Yes | 발행자. client를 입력합니다. |
currentTimeStamp | int64 | Yes | 현재 시간(Unix 타임스탬프). |
expireTimeStamp | int64 | No | 만료 시간(Unix 타임스탬프). 이를 지정하지 않으면 서명이 만료되지 않습니다. |
random | int64 | No | 임의의 숫자. |
protectSchema | string | No | 보호 모드. 이 매개변수는 암호화 체계가 'SimpleAES'인 경우에만 유효합니다. 이 매개변수를 sha256으로 설정하면 sha256(pkey)가 대칭 키로 사용되어 콘텐츠 키를 암호화합니다(pkey는 재생 키이고 sha256은 SHA256 알고리즘을 나타냅니다). |
Signature = HMACSHA256(base64UrlEncode(Header) + "." + base64UrlEncode(Payload), pkey)
Header:{"alg": "HS256","typ": "JWT"}
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.PayLoad:{"type": "DrmToken","appId": 1500014561,"fileId": "387702307091793695","currentTimeStamp": 1650964374,"expireTimeStamp": 2147483647,"random": 4220003655,"protectSchema": "sha256","issuer": "client"}
eyJ0eXBlIjoiRHJtVG9rZW4iLCJhcHBJZCI6MTUwMDAxNDU2MSwiZmlsZUlkIjoiMzg3NzAyMzA3MDkxNzkzNjk1IiwiY3VycmVudFRpbWVTdGFtcCI6MTY1MDk2NDM3NCwiZXhwaXJlVGltZVN0YW1wIjoyMTQ3NDgzNjQ3LCJyYW5kb20iOjQyMjAwMDM2NTUsInByb3RlY3RTY2hlbWEiOiJzaGEyNTYiLCJpc3N1ZXIiOiJjbGllbnQifQ.Signature: dK42jB0KP4sXCd7Dunng9AcQ2WlnANuB87PwxmTc3_g. pkey(값은 JduzsUuRvGVPRHvIYwLv)를 사용하여 생성됩니다.Header, PayLoad, Signature를 ~로 연결하면 eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9~eyJ0eXBlIjoiRHJtVG9rZW4iLCJhcHBJZCI6MTUwMDAxNDU2MSwiZmlsZUlkIjoiMzg3NzAyMzA3MDkxNzkzNjk1IiwiY3VycmVudFRpbWVTdGFtcCI6MTY1MDk2NDM3NCwiZXhwaXJlVGltZVN0YW1wIjoyMTQ3NDgzNjQ3LCJyYW5kb20iOjQyMjAwMDM2NTUsInByb3RlY3RTY2hlbWEiOiJzaGEyNTYiLCJpc3N1ZXIiOiJjbGllbnQifQ~JZ0sAV214-7vNckjb-llSntnqsIr-qF5oD4Lv7L1qGQ인 DrmToken을 얻게 됩니다.MediaInfoSet.AdaptiveDynamicStreamingInfo.AdaptiveDynamicStreamingSet.Url 의 값)을 가져옵니다.SimpleAES 암호화 동영상의 경우 재생 URL 형식은 다음과 같습니다.http(s)://xxx.com/xxx/xxx/test.m3u8이라고 가정합니다.http(s)://xxx.com/xxx/xxx/voddrm.token.<DrmToken>.test.m3u8입니다.voddrm.token.이 파일 이름에 추가되고 <DrmToken>의 값은 위에서 생성된 DrmToken입니다.https://1500014561.vod2.myqcloud.com/4395be81vodtranscq1500014561/8f8e01fb387702307091793695/adp.12.m3u8?t=9ee2bdd0&sign=46f6120466d6e931ad792bad8e4f8dff 라고 가정합니다DrmToken은 eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9~eyJ0eXBlIjoiRHJtVG9rZW4iLCJhcHBJZCI6MTUwMDAxNDU2MSwiZmlsZUlkIjoiMzg3NzAyMzA3MDkxNzkzNjk1IiwiY3VycmVudFRpbWVTdGFtcCI6MTY1MDk2NDM3NCwiZXhwaXJlVGltZVN0YW1wIjoyMTQ3NDgzNjQ3LCJyYW5kb20iOjQyMjAwMDM2NTUsInByb3RlY3RTY2hlbWEiOiJzaGEyNTYiLCJpc3N1ZXIiOiJjbGllbnQifQ~JZ0sAV214-7vNckjb-llSntnqsIr-qF5oD4Lv7L1qGQ입니다https://1500014561.vod2.myqcloud.com/4395be81vodtranscq1500014561/8f8e01fb387702307091793695/voddrm.token.eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9~eyJ0eXBlIjoiRHJtVG9rZW4iLCJhcHBJZCI6MTUwMDAxNDU2MSwiZmlsZUlkIjoiMzg3NzAyMzA3MDkxNzkzNjk1IiwiY3VycmVudFRpbWVTdGFtcCI6MTY1MDk2NDM3NCwiZXhwaXJlVGltZVN0YW1wIjoyMTQ3NDgzNjQ3LCJyYW5kb20iOjQyMjAwMDM2NTUsInByb3RlY3RTY2hlbWEiOiJzaGEyNTYiLCJpc3N1ZXIiOiJjbGllbnQifQ~JZ0sAV214-7vNckjb-llSntnqsIr-qF5oD4Lv7L1qGQ.adp.12.m3u8?t=9ee2bdd0&sign=46f6120466d6e931ad792bad8e4f8dff입니다CipherContentKey)에 대한 요청을 보냅니다. 요청 URL은 m3u8 파일에서 #EXT-X-KEY로 지정됩니다. 아래는 예시입니다.#EXT-X-KEY:METHOD=AES-128,URI="https://drm.vod2.myqcloud.com/getlicense/v1?drmType=SimpleAES&token=<DrmToken>"
SymmetricKey):SymmetricKey=SHA256(pkey)SHA256은 SHA256 알고리즘을 나타내고 pkey는 재생 키입니다.ContentKey)를 해독합니다.ContentKey=AES-CBC-Descrypt(CipherContentKey, SymmetricKey, IV)0x00000000000000000000000000000000인 초기화 벡터입니다.pkey)는 JduzsUuRvGVPRHvIYwLv이고, 대칭 키(SymmetricKey)는 0xece0bae38fbbd66f79c62acefb9ea994dc834d79b45cc4556962d9f00508b9b3 (32 Bytes)입니다.CipherContentKey)는 0x68addf7984478a3e4797d3a13ecbb6fb `(16 Bytes)입니다. 0x00000000000000000000000000000000(16 Bytes)입니다.ContentKey)는 0xbed3747b8510b040826163c04956a4c1(16 Bytes)입니다.피드백