• 如何使用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 格式的视频。

  • 相关阅读:
    一文带你学会Vue3基本语法
    趋势安全软件卸载:如何不需要密码或忘记密码卸载Trend Micro OfficeScan Agent?
    java使用poi-tl模版引擎导出word之列表循环数据渲染
    分布式session的4种解决方案
    Linux学习笔记--高级
    node对接微信支付,微信返回失败
    C语言——指针(函数)
    17个机器学习的常用算法
    【verilog】verilog语法刷题知识点总结
    Maven程序 tomcat插件安装与web工程启动
  • 原文地址:https://blog.csdn.net/qq_30193097/article/details/139152786