• 如何使用AES128位进行视频解密


    要实现AES128位加解密,可以使用JavaScript的crypto-js库。以下是一个简单的示例:

     HTML代码:

    <video controlsList="nodownload" controls>video>

    首先,需要安装crypto-js库:

    npm install crypto-js
    

    然后,可以使用以下代码进行AES128加解密: 

    1. import CryptoJS from 'crypto-js';
    2. const secretKey = 'your-secret-key'; // 替换为你的 AES 密钥
    3. const iv = 'your-iv'; // 替换为你的 AES IV
    4. const videoSourceUrl = 'your-video-url'; // 替换为你的视频的url,即video的src
    5. /**
    6. *
    7. * @param {*} iv AES IV
    8. * @param {*} key AES 密钥
    9. * @param {*} url 视频的url
    10. * @param {*} start 需要请求的视频段的起始位置
    11. * @param {*} end 需要请求的视频段的结束位置
    12. * @returns 解密后的视频
    13. */
    14. const fetchAndDecryptSegment=async (iv,key,url, start, end='')=>{
    15. // 调用后端接口获取加密的视频流
    16. const response = await fetch(url, {
    17. headers: {'Range': `bytes=${start}-${end}`}
    18. });
    19. const encryptedData = await response.arrayBuffer(); // 将获取到的加密的视频流转为Buffer类型
    20. const encryptedWordArray = CryptoJS.lib.WordArray.create(encryptedData);// 将Buffer类型的视频流转为WordArray类型
    21. // 解密视频流
    22. const decrypted = CryptoJS.AES.decrypt(
    23. {ciphertext: encryptedWordArray},
    24. CryptoJS.enc.Utf8.parse(key),
    25. {
    26. iv: CryptoJS.enc.Utf8.parse(iv),
    27. mode: CryptoJS.mode.CBC,
    28. padding: CryptoJS.pad.Pkcs7,
    29. }
    30. );
    31. // 对解密后的视频流进行编码
    32. const uint8Array = new Uint8Array(decrypted.sigBytes);
    33. for (let i = 0; i < decrypted.sigBytes; i++) {
    34. uint8Array[i] = (decrypted.words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;
    35. }
    36. return uint8Array;
    37. }
    38. const loadVideo=async ()=>{
    39. // 获取解密后的视频流,start 传0,end 不传,表示加载完整视频
    40. const decryptedData=await fetchAndDecryptSegment(iv,secretKey,videoSourceUrl,0)
    41. // 将解密后的视频流转成Blob对象
    42. const blob = new Blob([decryptedData], { type: "video/mp4" });
    43. // 创建Blob对象的临时URL
    44. const url = URL.createObjectURL(blob);
    45. const videoElement = document.getElementsByTagName('video')[0];
    46. // 将URL赋值给video的src
    47. videoElement.src=url
    48. }
    49. loadVideo()

     上述代码中,通过fetch获取视频数据,其中在 Headers 中配置了 'Range': `bytes=${start}-${end}` 是准备做视频分段加载播放的,经过调研,目前只有 fmp4 格式的视频才支持视频分段播放,所以,如果需要进行分段播放需要后端将视频转码成 fmp4 格式的视频。

  • 相关阅读:
    Pytorch——查找、替换module相关操作
    【JS 逆向百例】某网站加速乐 Cookie 混淆逆向详解
    SPA项目开发之首页导航+左侧菜单
    QT高阶-QSS样式表用法大全
    【C++基础】单例模式
    Hexo + Butterfly 键入在线聊天功能
    【仙逆】王林用计灭富二代,有长命锁也没用,藤化元一怒请一人出山
    从0开始python学习-28.selenium 需要图片验证的登录
    Python怎么打包和安装自定义的模块?
    深入探讨负载均衡的原理及算法
  • 原文地址:https://blog.csdn.net/qq_30193097/article/details/139152786