2009-11-11 58 views
0

我开发了一款应用程序,当前正在应用程序商店中,体重仅为400MB以上。这样做的主要原因是该应用程序提供了大量的视频,目前这些视频已经融入二进制文件。保护付费iPhone所需的外部资源应用程序

对于我们的下一个版本,我们希望将此视频外部化,允许用户下载他们想要保留的视频,并删除他们已经观看的视频。我们目前正在采购CDN等,现在正在设法解决我们如何保护这部视频。

问题是,如果我们只是使用标准的URL到mp4s,没有应用程序的人将能够下载我们用于网上付费客户的视频。有没有什么方法可以保护这些视频,以防止他们轻易被盗? (我确信,一旦视频被下载,我们就可以“轻松”地说出来,人们总能找到将应用程序从应用程序中剔除出去并将其置于洪流中的方法,但是如果它们在偷窃,那么如果我们没有做到这一点,不得不支付的带宽...)

我在想,也许我们可以以某种方式生成一次性网址,请求使用设备的UDID的某种散列,然后在服务器上验证,并且然后允许用户通过它下载。或者这只是无稽之谈?

这个问题的明智解决方案是什么?

由于提前,

UPDATE: 不幸的是我不能使用在应用程序内购买机制,这个程序是很好,真正在那里,所以需要找到我自己的保护我们的内容的方式。

将这项工作作为一个解决方案:(原谅我的白话,通常是客户端编码器)

1)服务器端,随机令牌每5-10分钟可以由应用程序请求的产生。

2)一旦应用程序有此标记,它使用此,该装置UDID,并在应用程序内烘烤,以产生通过MD5或东西另一令牌秘密密钥

3)的装置,使得对请求具有NEW令牌和设备UDID的服务器

4)服务器通过重复相同的进程服务器端(使用相同的魔术键)并查看它使用提供的udid生成的令牌是否匹配应用程序提出请求。如果是这样,它传递文件。

会这样吗?

+0

嗨,不幸的是我不能使用IAP机制,因为我们已经有一个很大的安装基础,我不能再次充电... – Tricky 2009-11-11 20:20:35

回答

2

我认为你的建议与我的建议是一致的。

查看Amazon S3方法以链接过期示例。我写在PHP以下帮手产生这些链接(与Zend框架的Zend____Crypt____Hmac作品一起,请参阅http://framework.zend.com/wiki/pages/viewpage.action?pageId=35309获取更多信息):

public function getExpiredQueryString($objectName, $expireTime, $bucketName){ 
      $stringToSign = "GET\n\n\n$expireTime\n/$bucketName/tracks/$objectName"; 
      $hashedSignature = Zend_Crypt_Hmac::compute(self::AMAZON_AWS_SECRET_KEY, 'sha1', utf8_encode($stringToSign)); 
      $signature = urlencode($this->_hex2b64($hashedSignature)); 

      $url = 'http://' . $bucketName . '.s3.amazonaws.com/tracks/' . $objectName . '?AWSAccessKeyId=' . self::AMAZON_AWS_KEY . '&Expires=' . $expireTime . '&Signature=' . $signature; 
      return $url; 
    } 

以下是_hex2b64的内容(不是原装的,而是有益的,看看) :

private function _hex2b64($str){ 
      $raw = ''; 
      for ($i=0; $i < strlen($str); $i += 2) 
      { 
       $raw .= chr(hexdec(substr($str, $i, 2))); 
      } 
      return base64_encode($raw); 
    } 

长期和短期的是,你可以创建可在数据库表中的TTL(例如)标记化链接结构是用于验证用户和授权的下载/流您的资产。

就可扩展性而言,您需要探索所有选项,包括数据库选择,Web服务器,操作系统,服务器端代码库的整体效率等。这是一个更大的对话。

希望这会有所帮助!

1

您可以免费提供应用程序,并提供视频作为应用程序内购买。您的服务器可以使用API​​来验证IAP收据,以确保客户通过Apple实际合法购买了该物品。

0

您可以随时让iPhone应用程序向包含其IP地址的服务器发送请求;然后在您的服务器上返回只允许访问该IP的下载URL。

0

我发现加密数据效果很好。让iPhone发送随机密钥,用服务器上的该密钥加密,在iPhone上解密。在CBC模式下使用AES,128bit。如果你想要更好的性能,你可能会考虑只加密文件的一部分,比如说10%的块在文件上均匀分布,这是一个折衷的结果,视频不值得关注vs保存的加密时间。

+0

这听起来很有趣...虽然它听起来相当沉重的表现。我们在安装1000次后已经有1000次,听起来我们会做大量的服务器端加密。 – Tricky 2009-11-11 20:26:55

相关问题