在iOS中播放加密mp3

在iOS中播放加密mp3,ios,audio,encryption,mp3,avaudioplayer,Ios,Audio,Encryption,Mp3,Avaudioplayer,我有一个aes加密的mp3文件,我需要在iOS中播放;出于安全原因,我无法将文件解密到磁盘,并且由于内存限制,我可能无法将其解密到内存 有没有一种方法可以直接播放加密文件,或者将其流式传输到播放器而不将其全部加载到内存中?我真的很困惑这一点,我甚至不知道从哪里开始。。。我使用AVAudioPlayer来播放文件,但我猜它不够灵活,无法满足我的需要。首先,您需要了解 如果不解密加密文件,则无法播放该文件,因为加密文件只是一些垃圾数据。在解密之前,你无法阅读或播放它 我不确定您如何加密文件以及如何获

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


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

首先,您需要了解

如果不解密加密文件,则无法播放该文件,因为加密文件只是一些垃圾数据。在解密之前,你无法阅读或播放它


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

首先您需要了解

如果不解密加密文件,则无法播放该文件,因为加密文件只是一些垃圾数据。在解密之前,你无法阅读或播放它


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

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

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

filestream fs = new filestream( path )
decryptionstream ds = decryptionstream( fs, decryptionkeydata )
AVAudioPlayer.open( ds );
AVAudioPlayer.play()

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

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

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

filestream fs = new filestream( path )
decryptionstream ds = decryptionstream( fs, decryptionkeydata )
AVAudioPlayer.open( ds );
AVAudioPlayer.play()

在内部,AVAudioPlayer将从decryptionstream读取数据块,这将从文件流中提取数据,这将从文件中提取数据。数据将在decryptionstream中解密,每次解密一个数据块。

对于音频或图像文件加密和解密,请使用RNCryptor算法-->

加密:

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)
解密:(播放音频时,必须先解密音频,然后再播放)


对于音频或图像文件加密和解密,请使用RNCryptor算法-->

加密:

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)
解密:(播放音频时,必须先解密音频,然后再播放)


这似乎有道理。。。我要试一试,然后回来报告!这似乎有道理。。。我要试一试,然后回来报告!