加密下载的安全文件是什么?如何获取?

简介: 出于安全性的考虑,我们点播支持对视频进行加密。视频加密之后使用我们的播放器进行解密,于是就需要一个加解密的流程,于是播放器下载就需要先拿到一个安全文件.以下我们来说明怎么样拿到这个安全文件.

1、概述

出于安全性的考虑,我们点播支持对视频进行加密。视频加密之后使用我们的播放器进行解密,于是就需要一个加解密的流程,于是播放器下载就需要先拿到一个安全文件.以下我们来说明怎么样拿到这个安全文件.

2、文档适用人群

对于客户端播放器实现下载需要的”安全图片“的开发者.

3、开启安全下载并生成安全文件

  • 1.保证开启点播服务之后,如何开启阿里云点播服务见:https://help.aliyun.com/document_detail/51512.html?spm=5176.doc51236.6.556.3OyQ7H
  • 2.在阿里云控制台选择云计算基础服务--->视频点播---->全局设置----->下载设置--->开启下载功能---->选择安全下载. [--->图示传送门]
  • 3.Android的唯一标识:需要提供一个sha1的密钥.可以通过命令行获取也可以通过代码获取。在文章的最后提供了一个代码段获取的示例.
  • 4.iOS的唯一标识:直接填bundleID即可
  • 5.需要提供两个值来获取密钥: 离线解密私钥怎么填写?
    填写16-32位的数字即可,其他没有限制.
  • 6.填写完成之后点击“生成密钥并并下载” 这样就拿到了你想要的安全图片了.

注意:

  1. 提供获取sha1的算法的前提是获取的默认的keystore的签名的sha1. 如果你最终release包是另外的keystore,建议直接在gradle文件中直接配置release keystore然后通过下面获取sha1的方法获取.

     //这里演示如何配置keystore,下面的keystore文件开发者可以自由替换, 一下配置的前提是开发者将keystore文件放在项目的根目录下.
     signingConfigs {
         debug {
             storeFile file("$rootDir/debug.keystore")
             storePassword "android"
             keyAlias "androiddebugkey"
             keyPassword "android"
         }
    
         release {
             storeFile file("$rootDir/debug.keystore")
             storePassword "android"
             keyAlias "androiddebugkey"
             keyPassword "android"
         }
     }
    
         buildTypes {
    
         debug {
             multiDexEnabled true
             signingConfig signingConfigs.debug
             minifyEnabled false
             proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
         }
    
         release {
             minifyEnabled true
             multiDexEnabled true
             signingConfig signingConfigs.release
             proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
         }
     }
    

  2. 这个是获取SHA1的方法
    //这个是获取SHA1的方法
    public static String getCertificateSHA1Fingerprint(Context context) {
         
         //获取包管理器
         PackageManager pm = context.getPackageManager();
         //获取当前要获取SHA1值的包名,也可以用其他的包名,但需要注意,
         //在用其他包名的前提是,此方法传递的参数Context应该是对应包的上下文。
         String packageName = context.getPackageName();
         //返回包括在包中的签名信息
         int flags = PackageManager.GET_SIGNATURES;
         PackageInfo packageInfo = null;
         try {
         
             //获得包的所有内容信息类
             packageInfo = pm.getPackageInfo(packageName, flags);
         } catch (PackageManager.NameNotFoundException e) {
         
             e.printStackTrace();
         }
         //签名信息
         Signature[] signatures = packageInfo.signatures;
         byte[] cert = signatures[0].toByteArray();
         //将签名转换为字节数组流
         InputStream input = new ByteArrayInputStream(cert);
         //证书工厂类,这个类实现了出厂合格证算法的功能
         CertificateFactory cf = null;
         try {
         
             cf = CertificateFactory.getInstance("X509");
         } catch (CertificateException e) {
         
             e.printStackTrace();
         }
         //X509证书,X.509是一种非常通用的证书格式
         X509Certificate c = null;
         try {
         
             c = (X509Certificate) cf.generateCertificate(input);
         } catch (CertificateException e) {
         
             e.printStackTrace();
         }
         String hexString = null;
         try {
         
             //加密算法的类,这里的参数可以使MD4,MD5等加密算法
             MessageDigest md = MessageDigest.getInstance("SHA1");
             //获得公钥
             byte[] publicKey = md.digest(c.getEncoded());
             //字节到十六进制的格式转换
             hexString = byte2HexFormatted(publicKey);
         } catch (NoSuchAlgorithmException e1) {
         
             e1.printStackTrace();
         } catch (CertificateEncodingException e) {
         
             e.printStackTrace();
         }
         return hexString;
     }
     //这里是将获取到得编码进行16进制转换
     private static String byte2HexFormatted(byte[] arr) {
         
         StringBuilder str = new StringBuilder(arr.length * 2);
         for (int i = 0; i < arr.length; i++) {
         
             String h = Integer.toHexString(arr[i]);
             int l = h.length();
             if (l == 1)
                 h = "0" + h;
             if (l > 2)
                 h = h.substring(l - 2, l);
             str.append(h.toUpperCase());
             if (i < (arr.length - 1))
                 str.append(':');
         }
         return str.toString();
     }
    
目录
相关文章
|
11月前
|
存储 安全 API
如何对 API 进行安全加密?
对API进行安全加密是保障数据安全和系统稳定的重要措施
978 60
|
3月前
|
安全 算法 量子技术
量子来了,DeFi慌了吗?——聊聊量子安全加密对去中心化金融的“革命冲击”
量子来了,DeFi慌了吗?——聊聊量子安全加密对去中心化金融的“革命冲击”
84 0
|
4月前
|
存储 安全 Cloud Native
云原生安全必修课:RDS透明加密(TDE)与数据脱敏联动实施方案
云原生环境下,数据泄露风险日益严峻,传统安全方案面临加密与脱敏割裂、保护不连续、权限控制粗放三大挑战。本方案融合TDE透明加密与动态数据脱敏技术,构建存储-传输-计算全链路防护体系,通过SQL级加密与角色化脱敏规则,实现细粒度数据保护。结合密钥管理、权限控制与多云适配,提升安全性与性能,广泛适用于金融、医疗等高安全要求场景。
151 3
|
4月前
|
存储 Java 数据安全/隐私保护
Java技术栈揭秘:Base64加密和解密文件的实战案例
以上就是我们今天关于Java实现Base64编码和解码的实战案例介绍。希望能对你有所帮助。还有更多知识等待你去探索和学习,让我们一同努力,继续前行!
386 5
|
7月前
|
存储 安全 数据安全/隐私保护
Hyper V文件复制安全:加密与访问控制
在Hyper-V环境中,确保文件复制的安全性至关重要。主要措施包括:启用数据加密、使用HTTPS协议和磁盘加密技术(如BitLocker)保护数据传输和存储;通过身份验证、权限管理和审核日志控制访问;定期更新补丁、实施网络隔离及制定备份恢复策略。这些多层次的安全措施共同防止未经授权的访问和数据泄露,保障数据安全。
Hyper V文件复制安全:加密与访问控制
|
存储 安全 5G
|
8月前
|
安全 算法 物联网
SSL/TLS:互联网通信的加密基石与安全实践
**简介:** 在数字化时代,互联网每天传输海量敏感数据,网络攻击频发。SSL/TLS协议作为网络安全的基石,通过加密技术确保数据安全传输。本文解析SSL/TLS的技术架构、密码学原理、应用场景及常见误区,探讨其在未来的发展趋势,强调持续演进以应对新型威胁的重要性。 SSL/TLS不仅保障Web安全,还广泛应用于API、邮件、物联网等领域,并遵循合规标准如PCI DSS和GDPR。
|
8月前
|
算法 安全 Java
即时通讯安全篇(一):正确地理解和使用Android端加密算法
本文主要讨论针对Android这样的移动端应用开发时,如何正确的理解目前常用的加密算法,为诸如即时通讯应用的实战开发,如何在合适的场景下选择适合的算法,提供一些参考。
244 0
|
安全 Linux 数据安全/隐私保护
python知识点100篇系列(15)-加密python源代码为pyd文件
【10月更文挑战第5天】为了保护Python源码不被查看,可将其编译成二进制文件(Windows下为.pyd,Linux下为.so)。以Python3.8为例,通过Cython工具,先写好Python代码并加入`# cython: language_level=3`指令,安装easycython库后,使用`easycython *.py`命令编译源文件,最终生成.pyd文件供直接导入使用。
383 3
python知识点100篇系列(15)-加密python源代码为pyd文件