首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在iOS中播放加密的mp3

在iOS中播放加密的mp3
EN

Stack Overflow用户
提问于 2012-06-15 07:08:47
回答 3查看 2.3K关注 0票数 0

我有一个需要在iOS中播放的aes加密的mp3文件;出于安全原因,我不能将该文件解密到磁盘,也可能因为内存限制而无法将其解密到内存。

有没有一种方法可以直接播放加密文件,或者将其流式传输到播放器,而无需将其全部加载到内存中?我真的很困惑,我甚至不知道从哪里开始…我正在使用AVAudioPlayer播放文件,但我猜它不够灵活,不能做我想做的事情。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-06-15 22:44:43

我不知道AVAudioPlayer是如何工作的,但解决这个问题的唯一方法是提供某种播放器可以访问的抽象。如果玩家只能访问“文件”对象,那么你就不走运了,必须使用另一个播放器。如果播放器可以访问某种类型的输入流(我怀疑它可以),您可以从文件创建一个流(称为“文件流”),并从文件流创建一个解密流。只有在需要使用已经存在的代码(如crypto++)来创建解密流的情况下,您才需要了解AES加密。

在psuedodcode中,它看起来像这样:

代码语言:javascript
复制
filestream fs = new filestream( path )
decryptionstream ds = decryptionstream( fs, decryptionkeydata )
AVAudioPlayer.open( ds );
AVAudioPlayer.play()

在内部,AVAudioPlayer将从解密流中读取数据块,这将从文件流中拉出数据,这将从文件中拉出数据。数据将在解密流中解密,一次解密一块。

票数 3
EN

Stack Overflow用户

发布于 2018-01-31 16:54:53

对于音频或图像文件的加密和解密,使用RNCryptor算法--> https://github.com/RNCryptor/RNCryptor

加密:

代码语言:javascript
复制
let fileData = try NSData(contentsOf: fileURL, options: NSData.ReadingOptions.mappedIfSafe)
let encryptData = RNCryptor.encrypt(data: fileData as Data, withPassword: "password")
try encryptData.write(to: fileURL, options: Data.WritingOptions.completeFileProtection)

解密:(播放音频需要先解密音频再播放)

代码语言:javascript
复制
let fileData = try NSData(contentsOfFile: filePath, options:NSData.ReadingOptions.mappedIfSafe)
encryptData = RNCryptor.encrypt(data: fileData as Data, withPassword: password)
try encryptData.write(to: URL.init(fileURLWithPath: filePath), options: Data.WritingOptions.completeFileProtection)
票数 3
EN

Stack Overflow用户

发布于 2012-06-15 07:18:20

首先,您需要了解how does AES encryption work

不解密就不能播放加密文件,因为加密文件只是一些垃圾数据。在解密之前,您不能读取或播放它。

我不确定你是如何加密你的文件的,以及你将如何获得解密的密钥,但你的第一步是获得解密过程的对称密钥。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11042583

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档