Diez formas de cifrar y evitar la descarga de cursos de formación internos y cursos pagos en plataformas educativas en línea

Diez formas de cifrar y evitar la descarga de cursos de formación internos y cursos pagos en plataformas educativas en línea:

Demostración de ejemplo: Vídeo del curso: Lección 1 Cláusulas adverbiales, aplicación de demostración de VRM

Cursos de formación internos y cursos pagos en plataformas educativas en línea, ¿cómo cifran sus cursos en vídeo? Hemos recopilado 10 ideas para su referencia:

1.Cifrado de vídeo desordenado fragmentado VRM

La tecnología de codificación distribuida se utiliza para dividir físicamente archivos de video y cada video se cifra con una combinación de múltiples algoritmos. Al mismo tiempo, combinado con un libro de códigos desarrollado independientemente, los datos clave se mezclan en orden y los archivos de video se cifran. en el nivel más alto De esta manera, el contenido cifrado del video incluso si se descarga, no se puede redistribuir maliciosamente, lo que hace que sea dos veces más difícil descifrar el video.

2.Cifrado de vídeo de enlace completo HTML5

El cifrado H5 común en el mercado adopta el mecanismo de protección de video de cifrado HLS estándar de Apple. Sobre esta base, llevamos a cabo una optimización profunda, ciframos profundamente la clave y simultáneamente logramos un doble cifrado del reproductor de video y los archivos de datos de video para formar un terminal La protección de seguridad de video de enlace completo de extremo a extremo significa que incluso si el archivo de video es robado, otras aplicaciones no podrán reproducirlo, lo que hace que el video sea más seguro.

 Ejemplo de nuestro método de llamada cifrada:

<div id="player"></div>
<script src="//player.polyv.net/script/player.js"></script>
<script>
var player = polyvPlayer({
    wrap: '#player',
    width: 800,
    height: 533,
    vid: '88083abbf5bcf1356e05d39666be527a_8',   
    playsafe:'81814fed-bdd0-4506-bec1-ebc8093148c5-hfevwsfxcsbcocx', 
  //playsafeUrl:'https://myDomain.com/token', // 业务方自定义的获取播放凭证接口URL,与playsafe参数二选一
    ts:'1568131545000',
    sign:'88313661ba7ded642c7b557b0a364b4b'
});

//切换加密视频时,需要重新获取播放凭证。如果初始化播放器时使用了playsafeUrl参数,则播放器会自动获取新的凭证,无需传playsafe参数。
player.changeVid({
  vid: '88083abbf5bcf1356e05d39666be527a_9', //需要切换的视频vid
  playsafe: '81814fed-bdd0-4506-bec1-ebc8093148c6-hfevwsfxcsbcocx', //新获取的playsafe token
  sign: '88313661ba7ded642c7b557b0a364b4c', //新获取的sign和ts参数
  ts: '1568131545001'
});
</script>

Antes de reproducir videos cifrados en una página web, debe acceder a la interfaz de verificación de autorización del lado del servidor de la empresa (puede agregar aquí la lógica de verificación de autorización de su propia empresa, como si iniciar sesión, si comprar cursos, etc.). Se recomienda utilizar HTTPS). Si se permite la reproducción en la empresa, las credenciales de reproducción se obtienen creando una interfaz Playsafe Token (o los parámetros sign y ts se generan en el lado del servidor) y se devuelven al reproductor web.

Ejemplo de código para la generación de credenciales de reproducción en el lado del servidor:

// 接口中应附带自有业务的授权验证逻辑,如判断是否登录、是否购买课程等

// 以下为生成播放凭证的代码示例
function get_client_ip() {
  if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
    $ipaddress = $_SERVER['HTTP_CLIENT_IP'];
  } elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
      $ipaddress = $_SERVER['HTTP_X_FORWARDED_FOR'];
  } else {
      $ipaddress = $_SERVER['REMOTE_ADDR'];
  }
    return $ipaddress;
}

$userId = 'your userId';       // 保利威点播账号的userId
$secretkey = 'your secretkey';     // 保利威点播账号的secretkey
$videoId = '88083abbf5bcf1356e05d39666be527a_8';  // 视频vid
$ts = time() * 1000;      // 时间戳
$viewerIp = get_client_ip();  // 观众ip
$viewerId = '12345';      // 观众id
$viewerName = 'testUser';  // 观众昵称, 若值为中文需要urlencode('张三')
$extraParams = 'HTML5';  // 自定义扩展参数
$disposable = false // true 表示 token 仅一次有效。false 则表示在有效期内可以多次验证。默认为 false。

/* 将参数 $userId、$secretkey、$videoId、$ts、$viewerIp、$viewerIp、$viewerId、$viewerName、$extraParams按照ASCKII升序 key + value + key + value ... +value 拼接
*/
$concated =  'extraParams'.$extraParams.'ts'.$ts.'userId'.$userId.'videoId'.$videoId.'viewerId'.$viewerId.'viewerIp'.$viewerIp.'viewerName'.$viewerName;
// 首尾加上secretkey值
$plain = $secretkey.$concated.$secretkey;
// 取大写MD5
$sign = strtoupper(md5($plain));

// 然后将下列参数用post请求  https://hls.videocc.net/service/v1/token 获取 token
$url = 'https://hls.videocc.net/service/v1/token';
$data = array('userId' => $userId, 'videoId' => $videoId, 'ts' => $ts, 'viewerIp' => $viewerIp, 'viewerName' => $viewerName, 'extraParams' => $extraParams, 'viewerId' => $viewerId, 'sign' => $sign);
$options = array(
    'http' => array(
        'header'  => "Content-type: application/x-www-form-urlencoded",
        'method'  => 'POST',
        'content' => http_build_query($data)
    )
);
$context  = stream_context_create($options);
$result = file_get_contents($url, false, $context);

// 获取接口返回结果中的token值, 并传给播放器播放加密视频
$token = json_decode($result)->data->token;
echo $token;

Código Java SpringMvc:

@ResponseBody
@RequestMapping("/playerSafe")
public String playerSafe(HttpServletRequest request) {
    String userId = "your userId";       // 保利威点播账号的userId
    String secretkey = "your secretkey";     // 保利威点播账号的secretkey
    String videoId = "88083abbf5bcf1356e05d39666be527a_8";  // 视频vid
    long ts = System.currentTimeMillis();      // 时间戳
    String viewerIp = getClientIp(request);  // 观众ip
    String viewerId = "12345";      // 观众id
    String viewerName = "testUser";  // 观众昵称, 若值为中文需要urlencode('张三')
    String extraParams = "HTML5";  // 自定义扩展参数
    boolean disposable = false; // true 表示 token 仅一次有效。false 则表示在有效期内可以多次验证。默认为 false。

    /* 将参数 userId、secretkey、videoId、ts、viewerIp、viewerIp、viewerId、viewerName、extraParams按照ASCKII升序 key + value + key + value ... +value 拼接
     */
    String concated = "extraParams" + extraParams + "ts" + ts + "userId" + userId + "videoId" + videoId + "viewerId" + viewerId + "viewerIp" + viewerIp + "viewerName" + viewerName;
    // 首尾加上secretkey值
    String plain = secretkey + concated + secretkey;
    // 取大写MD5,可自行选择md5库
    String sign = md5Hex(plain).toUpperCase();

    // 然后将下列参数用post请求  https://hls.videocc.net/service/v1/token 获取 token
    String url = "https://hls.videocc.net/service/v1/token";

    Map<String, String> params = new HashMap<>();
    params.put("userId", userId);
    params.put("videoId", videoId);
    params.put("ts", String.valueOf(ts));
    params.put("viewerIp", viewerIp);
    params.put("viewerName", viewerName);
    params.put("extraParams", extraParams);
    params.put("viewerId", viewerId);
    params.put("sign", sign);
    // 可自行选择http客户端
    String response = HttpClientUtil.getInstance().sendHttpPost(url, params);

    try {
        //解析json
        ObjectMapper objectMapper = new ObjectMapper();
        TokenResponse tokenResponse = objectMapper.readValue(response, TokenResponse.class);
        // 响应代码,200为成功,403为ts过期或签名错误,400为参数错误(例如缺少 userId 或 videoId)
        if (tokenResponse.getCode() == 200) {
            Map data = (Map) tokenResponse.getData();
            return data.get("token").toString();
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
    return "";
}
static class TokenResponse {
    int code;
    String status;
    String message;
    Object data;
    //省略getter、setter...
}
public String getClientIp(HttpServletRequest request) {
    String ip = request.getHeader("x-forwarded-for");
    if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
        ip = request.getHeader("Proxy-Client-IP");
    }
    if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
        ip = request.getHeader("WL-Proxy-Client-IP");
    }
    if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
        ip = request.getRemoteAddr();
    }
    return ip;
}

3. Ticker de identificación de usuario

Configure la identificación del usuario I, el número de teléfono u otra información para que se reproduzca de manera irregular en el video (para rastrear piratas). La función de marquesina de identificación se refiere a configurar el contenido de texto (generalmente la información de identificación del espectador) para que se desplace irregularmente en el video para advertir a los piratas y lograr el efecto de protección de derechos de autor del video. En el ejemplo, se muestran la identificación del usuario y el número de teléfono.

4.Marca de agua dinámica digital

La identificación del usuario, el número de teléfono u otro contenido informativo se muestra en el video en forma de una marca de agua dinámica, de modo que la marca de agua aparece de manera irregular en el video, lo que puede rastrear la identidad del grabador de pantalla y tener un fuerte efecto disuasorio en la extracción. comportamiento.

5. Grabación antipantalla del navegador

A través del monitoreo en tiempo real del reproductor, si se detecta que el video está en el estado de grabación de pantalla o la ventana pequeña está esperando la grabación de la pantalla, el video dejará de reproducirse inmediatamente, se mostrará un mensaje de error y el video no podrá reproducirse. seguir jugando.

6. Marca de agua de vídeo (LOGO corporativo)

Agregue una marca de agua de video específica de la empresa al video para incorporar la información de derechos de autor de la empresa en el video para evitar que los piratas roben los derechos de autor y proteger la propiedad intelectual de la empresa. Después de cargar el video, la marca de agua del ícono del logotipo de la empresa se agregará automáticamente en la esquina superior derecha/esquina inferior derecha del video.

7. Lista blanca de nombres de dominio OVP anti-leeching

Utilice la tecnología anti-leeching de OVP para realizar la reproducción de sitios web designados, comúnmente conocida como lista blanca y negra de nombres de dominio. Establecer una lista blanca para el sitio web A solo permitirá que los videos se reproduzcan en el sitio web A; establecer una lista negra para el sitio web B prohibirá la reproducción de videos en el sitio web B, lo que puede prevenir efectivamente que los recursos de video originales del usuario sean apropiados ilegalmente.

8. Datos ATS/HTTPS a prueba de manipulaciones

El protocolo HTTPS adopta el protocolo HTTPS, que proporciona autenticación de sitios web y métodos de comunicación cifrados para evitar la interceptación de información y ataques de "phishing", prevenir eficazmente la manipulación de páginas web y garantizar la seguridad de la información entre empresas y estudiantes; estándar ATS, el sistema operativo Apple sigue ATS De manera estándar, después de activar la función de seguridad ATS, la transmisión de red se transmite automáticamente a través del protocolo HTTPS para garantizar una reproducción de video segura.

9. Ofuscación y cifrado del código del jugador.

El código del reproductor está cifrado para evitar la descompilación, la ofuscación del código, etc.

10. Deshabilite el arrastre de la barra de progreso del video.

Ejemplo de prohibición de la función de arrastrar y soltar en el reproductor HTML5 (comúnmente utilizado en escenarios: capacitación corporativa, contenido de enseñanza en línea que prohíbe a los estudiantes arrastrar videos para verlos).

 Mis recomendaciones de artículos:

Supongo que te gusta

Origin blog.csdn.net/sinat_33049251/article/details/132765885
Recomendado
Clasificación