Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
更好的加密方法&;解密BlackBerry中的音频?_Blackberry_Encryption - Fatal编程技术网

更好的加密方法&;解密BlackBerry中的音频?

更好的加密方法&;解密BlackBerry中的音频?,blackberry,encryption,Blackberry,Encryption,我使用此代码在BlackBerry上动态播放解密的音频(为了简单起见,我使用) public void play(字符串路径){ 试一试{ FileConnection fc=(FileConnection)Connector.open(路径,Connector.READ); InputStream=fc.openInputStream(); 字节[]rawData=IOUtilities.streamToBytes(is); processEncryptedAudio(原始数据); is.cl

我使用此代码在BlackBerry上动态播放解密的音频(为了简单起见,我使用)

public void play(字符串路径){
试一试{
FileConnection fc=(FileConnection)Connector.open(路径,Connector.READ);
InputStream=fc.openInputStream();
字节[]rawData=IOUtilities.streamToBytes(is);
processEncryptedAudio(原始数据);
is.close();
fc.close();
}
捕获(IOException ioex){
}
}
//TEA代码取自http://www.winterwell.com/software/TEA.php
私有void processEncryptedAudio(字节[]数据)引发IOException{
TEA TEA=新茶(“ABCDE ABCDE ABC A ABCDEF”.getBytes());
字节[]解密的_数据=tea.decrypt(数据);
ByteArrayInputStream=新的ByteArrayInputStream(解密的_数据);
ByteArrayInputStreamDataSource源=新的ByteArrayInputStreamDataSource(流,“音频/mpeg”);
试一试{
player=Manager.createPlayer(源);
player.start();
}
接住(我){
alert(“MediaException:+me.getMessage());
}
}
问题是解密需要相当长的时间才能完成。例如:在模拟器上,解密9MB音频大约需要5秒,但在BlackBerry Torch 9860上需要20秒以上


有什么办法可以改进这一点吗?事实上,整个文件不需要加密,只要它是模糊的/不能直接播放。

您可以尝试从TEA切换到TEA,这也很容易实现,而且可能更快

另外,看起来您正在进行一些不必要的数据复制:让
decrypt()
方法直接修改输入字节数组会稍微有效一些。这可能需要更改调用代码以跳过解密数据开头和/或结尾的一些字节数,但这应该不会太难。(
ByteArrayInputStream
构造函数可以采用可选的
offset
length
参数。)

如果你真的想变得有趣,你可以试着编写你自己的自定义
InputStream
子类,在播放音频时“动态”进行解密。如果在中使用分组密码(或ECB,但不安全),甚至可以使流可查找。如果你想更喜欢它,就把它做成原始
InputStream
的包装器,这样你就可以同时进行加载、解密和播放

另一种选择可能是使用,它的密码实现可能比您自己的密码实现更高效(可能在优化的本机代码中实现)。Crypto API还提供了以我上面描述的方式工作的


一个可能的缺点是加密API似乎只对已签名的应用程序可用。

谢谢。我来看看RIM加密API。希望我不需要做太多的修改。顺便说一下,编写自己的自定义InputStream看起来也很有趣。我以前从未这样做过。也许你有一些片段可以分享?@anta40:不太可能,但基本上你只需要看看(或)文档,思考如何实现所有这些方法。(如果您愿意,其中一些方法可以保持未实现,如果您正在包装另一个流,您可以或多或少地将许多方法直接委托给包装的流。)好的,在此之前,我尝试了另一种方法,即逐块读取文件块:。在设备上试过,我什么都听不见。不知道为什么:/player可能需要访问整个音频流,它无法理解其中的一部分,至少如果该部分来自流的中间部分。此外,如果您想在多个块中进行解密,您可能需要记住(至少)IV。。我假设您使用的密码模式有一个;如果不是,你真的应该是。