hlsdl icon indicating copy to clipboard operation
hlsdl copied to clipboard

Error with decryption

Open dexter101010 opened this issue 5 years ago • 5 comments

Hi all,

I am trying to downloading an encrypted stream but i get the following errors :

hlsdl-0.26>hlsdl -C cookies.txt -b -v -o "file.ts" -h "Referer=https://online.uninets.com/s/courses/5b6288fde4b0e2daaa77752f/take" "https://vcdn.spayee.in/spees/w/o/5b49b8f2e4b02ac9d5e71945/v/5caf25bce4b00db56cfa45a3/u/5cd933e1e4b0c2b0f7965a3b/t/e80dfde6264579bb5595ca590255fd5b/p/assets/videos/2019/04/11/5caf25bce4b00db56cfa45a3/hls_1M_.m3u8"

START media_playlist_get_links END media_playlist_get_links HLS Stream is AES-128 encrypted. Media Playlist parsed successfully. File already exists. Overwrite? (y/n) y Downloading segments. {"d_t":"vod"} {"t_d":2926,"d_d":0, "d_s":0} Downloading part 0 Error: AES128_CBC_DecryptUpdate failed: 0, in_size: 424896, out_size: 424880 {"t_d":2926,"d_d":2,"d_s":424880} Downloading part 1 Error: AES128_CBC_DecryptUpdate failed: 0, in_size: 232560, out_size: 232544 Downloading part 2 Error: AES128_CBC_DecryptUpdate failed: 0, in_size: 130864, out_size: 130848 Downloading part 3

dexter101010 avatar Sep 21 '20 12:09 dexter101010

Hmm, I’m not really familiar with this URI="k/timestamp" encryption.

selsta avatar Sep 21 '20 16:09 selsta

Hmm, I’m not really familiar with this URI="k/timestamp" encryption.

Hi ,

Maybe you can implement the following into your app :

import re import logging

from Crypto.Cipher import AES from streamlink import StreamError from streamlink.plugin import Plugin from streamlink.stream import HLSStream from streamlink.stream.hls import HLSStreamWriter, HLSStreamReader

log = logging.getLogger(name)

class SpayeeStreamWriter(HLSStreamWriter): def _decrypt_key(self,data): tmp1 = data[0:16] tmp2 = data[32:48] dec1 = AES.new(tmp2,AES.MODE_ECB) tmp3 = dec1.decrypt(tmp1) dec2 = AES.new(tmp3,AES.MODE_ECB) return dec2.decrypt(tmp2)

def create_decryptor(self, key, sequence):
    if key.method != "AES-128":
        raise StreamError("Unable to decrypt cipher {0}", key.method)

    if not self.key_uri_override and not key.uri:
        raise StreamError("Missing URI to decryption key")

    key_uri = self.key_uri_override if self.key_uri_override else key.uri

    if self.key_uri != key_uri:
        res = self.session.http.get(key_uri, exception=StreamError,
                                    retries=self.retries,
                                    **self.reader.request_params)
        res.encoding = "binary/octet-stream"
        self.key_data = self._decrypt_key(res.content)
        self.key_uri = key_uri

    iv = key.iv or num_to_iv(sequence)

    # Pad IV if needed
    iv = b"\x00" * (16 - len(iv)) + iv

    return AES.new(self.key_data, AES.MODE_CBC, iv)

class SpayeeStreamReader(HLSStreamReader): writer = SpayeeStreamWriter

class SpayeeStream(HLSStream): def open(self): reader = SpayeeStreamReader(self) reader.open()

    return reader

class Spayee(Plugin): url_re = re.compile(r"""https://vcdn.spayee.in/.*.m3u8""")

def __init__(self, url):
    super(Spayee, self).__init__(url)

@classmethod
def can_handle_url(cls, url):
    return cls.url_re.match(url) is not None

def _get_streams(self):
    return {"live":SpayeeStream(self.session,self.url)}

plugin = Spayee

I am not a developer, so i don't know how to do it.

Thanks in advance!

dexter101010 avatar Sep 28 '20 09:09 dexter101010

Hi all,

I am trying to downloading an encrypted stream but i get the following errors :

hlsdl-0.26>hlsdl -C cookies.txt -b -v -o "file.ts" -h "Referer=https://online.uninets.com/s/courses/5b6288fde4b0e2daaa77752f/take" "https://vcdn.spayee.in/spees/w/o/5b49b8f2e4b02ac9d5e71945/v/5caf25bce4b00db56cfa45a3/u/5cd933e1e4b0c2b0f7965a3b/t/e80dfde6264579bb5595ca590255fd5b/p/assets/videos/2019/04/11/5caf25bce4b00db56cfa45a3/hls_1M_.m3u8"

START media_playlist_get_links END media_playlist_get_links HLS Stream is AES-128 encrypted. Media Playlist parsed successfully. File already exists. Overwrite? (y/n) y Downloading segments. {"d_t":"vod"} {"t_d":2926,"d_d":0, "d_s":0} Downloading part 0 Error: AES128_CBC_DecryptUpdate failed: 0, in_size: 424896, out_size: 424880 {"t_d":2926,"d_d":2,"d_s":424880} Downloading part 1 Error: AES128_CBC_DecryptUpdate failed: 0, in_size: 232560, out_size: 232544 Downloading part 2 Error: AES128_CBC_DecryptUpdate failed: 0, in_size: 130864, out_size: 130848 Downloading part 3

Hey! Have you found the method to download this ?

KrishanKumark08 avatar Jan 14 '22 16:01 KrishanKumark08

Have you found the solution, then please do share!

KrishanKumark08 avatar Jan 14 '22 16:01 KrishanKumark08