gpt4 book ai didi

blackberry - 在 BlackBerry 中加密和解密音频的更好方法?

转载 作者:行者123 更新时间:2023-12-02 03:56:32 24 4
gpt4 key购买 nike

我使用这段代码在黑莓手机上即时播放解密的音频(为了简单起见,我使用 TEA )

public void play(String path){
try {
FileConnection fc = (FileConnection) Connector.open(path, Connector.READ);
InputStream is = fc.openInputStream();
byte[] rawData = IOUtilities.streamToBytes(is);
processEncryptedAudio(rawData);
is.close();
fc.close();
}
catch (IOException ioex){

}
}

// TEA code is taken from http://www.winterwell.com/software/TEA.php
private void processEncryptedAudio(byte[] data) throws IOException {
TEA tea = new TEA("ABCDE ABCDE ABC A ABCDEF".getBytes());
byte[] decrypted_data = tea.decrypt(data);
ByteArrayInputStream stream = new ByteArrayInputStream(decrypted_data);
ByteArrayInputStreamDataSource source = new ByteArrayInputStreamDataSource(stream, "audio/mpeg");

try {
player = Manager.createPlayer(source);
player.start();
}
catch (MediaException me){
Dialog.alert("MediaException: "+me.getMessage());
}
}

问题是解密需要很长时间才能完成。例如:在模拟器上,解密一个 9 MB 的音频大约需要 5 秒,但在 BlackBerry Torch 9860 上需要超过 20 秒。

有什么办法可以改善吗?其实整个文件都不需要加密,只要被遮挡/不能直接播放就可以了。

最佳答案

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

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

如果您真的很想玩得开心,您可以尝试编写自己的自定义 InputStream 子类,在播放音频时“即时”进行解密。如果您在 CTR, CFB or CBC mode 中使用分组密码(或 ECB,但这并不安全),您甚至可以使流可搜索。如果你想更花哨一些,让它成为原始 InputStream 的包装器,这样你就可以同时进行加载、解密和播放所有

另一种选择可能是使用 RIM Crypto API ,其密码实现可能比您自己的更有效(可能以优化的 native 代码实现)。 Crypto API 也已经提供了 DecryptorInputStream class它以我上面描述的方式工作。

一个可能的缺点是 Crypto API 似乎仅适用于已签名的应用。

关于blackberry - 在 BlackBerry 中加密和解密音频的更好方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12347184/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com