保利威文档中心

幫助中心

如何正確使用SDK加密串

更新時間:2024-12-16 19:20:19

保利威點播SDK需要使用者提供 useridreadtokenwritetokensecretkey 幾個設定資訊才能解密播放影片。基於安全性考量,建議這些參數保存在伺服器端,APP 在啟動時從伺服器端取得並設定。

為防止 APP 端被嗅探這幾個參數,需要對傳輸的內容進行加密。因此,就有了 SDK加密串 ——在伺服器端對以上四個參數進行加密,APP端對應的進行解密。開發者應當設計自己的加解密方式,並且APP端應透過 https 協定請求伺服器端介面。

為方便快速整合和除錯SDK的功能,保利威管理後台提供了一種固定加密方式的臨時SDK加密串,請勿直接在正式環境使用。

點播SDK整合文件詳見:

正式使用解決方案

一、設計自己的加解密方式。

伺服器端 Java 範例:

   /*该示例采用AES加密算法,开发者也可以选择使用不同的加密算法,并在APP端做对应的解密。*/
    String plainString = userid + "," + secretkey + "," + readtoken + "," + writetoken;
    String key = "1234567812345678"; // 加密密钥
    String iv = "1234567812345678"; // 加密向量

    Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
    int blockSize = cipher.getBlockSize();

    byte[] dataBytes = plainString.getBytes();
    int plaintextLength = dataBytes.length;
    if (plaintextLength % blockSize != 0) {
        plaintextLength = plaintextLength + (blockSize - (plaintextLength % blockSize));
    }

    byte[] plaintext = new byte[plaintextLength];
    System.arraycopy(dataBytes, 0, plaintext, 0, dataBytes.length);

    SecretKeySpec keyspec = new SecretKeySpec(key.getBytes(), "AES");
    IvParameterSpec ivspec = new IvParameterSpec(iv.getBytes());

    cipher.init(Cipher.ENCRYPT_MODE, keyspec, ivspec);
    byte[] encrypted = cipher.doFinal(plaintext);
    String baseString = Base64.encode(encrypted);
    System.out.println(baseString);

伺服器端 PHP 加密範例:

<?php
   /*该示例采用AES加密算法,开发者也可以选择使用不同的加密算法,并在APP端做对应的解密。*/
    $privateKey = "1234567812345678";// 加密密钥
    $iv = "1234567812345678"; // 加密向量

    $userid = "你的userid";
    $secretkey = "你的secretkey";
    $readtoken = "你的readtoken";
    $writetoken = "你的writetoken";
    $plainstring = $userid.",".$secretkey.",".$readtoken.",".$writetoken;

    $str_padded = $plainstring;
    if (strlen($str_padded) % 16) {
        $str_padded = str_pad($str_padded, strlen($str_padded) + 16 - strlen($str_padded) % 16, "\0");
    }

    $encrypted = openssl_encrypt($str_padded, 'aes-128-cbc', $privateKey, OPENSSL_RAW_DATA, $iv);
    echo(base64_encode($encrypted));
?>

Android 端解密與設定

public class PolyvApplication extends Application {
    @Override
    public void onCreate() {
        new LoadConfigTask().execute();
    }

    private class LoadConfigTask extends AsyncTask<String, String, String> {

    @Override
    protected String doInBackground(String... params) {
        String config = PolyvSDKUtil.getUrl2String("https://demo.ipolyv.cn/demo/appkey.php");
        if (TextUtils.isEmpty(config)) {
        try {
            throw new Exception("没有取到数据");
        } catch (Exception e) {
            e.printStackTrace();
        }
        }

        return config;
    }

    @Override
    protected void onPostExecute(String config) {
        PolyvSDKClient client = PolyvSDKClient.getInstance();
        String iv = "1234567812345678"; // 加密密钥
        String aeskey = "1234567812345678"; // 加密向量
        client.settingsWithConfigString(config, aeskey, iv);
      /*
       *开发者若使用其它加密算法,可自行解密并使用
       *client.settingsWithUserid(String userid, String secretkey, String readtoken, String writetoken)方法进行初始化。
      */
      
    }
    }
}

iOS 端解密與設定:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"https://demo.ipolyv.cn/demo/appkey.php"]];
    NSString *configString  =[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
    NSString *aesKey = @"1234567812345678";
    NSString *aesIv = @"1234567812345678";
    NSError *error = nil;
    //使用保利威点播 SDK 提供的加密方式得到 SDK 配置信息
    [PLVVodSettings settingsWithConfigString:configString key:aesKey iv:aesIv error:&error];
    
    /* 客户也可以用自己的方法解密得到 secretkey 等信息,并使用以下方法初始化 SDK
    [PLVVodSettings settingsWithUserid:userId readtoken:readtoken writetoken:writetoken secretkey:secretkey];
    */
    return YES;
}

二、保證伺服器端介面穩定

伺服器端介面不穩定可能導致加密串無法成功取得,APP播放影片會出現無法解碼播放的錯誤,建議:

  • 程式上對介面請求增加失敗重試機制;
  • 針對加密串和不常改動的設定,利用CDN加速和快取,保證高可用性;
  • 增加備用介面,當主介面請求和重試都失敗時,呼叫備用介面。

三、對APP進行加固

對於安全性要求較高的公司,可對 APP 進行加固,防止 APP 被反編譯得到原始碼,從而導致帳號及使用者隱私資料的洩漏。市面上有很多對 APP 進行加固的產品可以使用。

联系客服,在线咨询