【问题标题】:sipdroid data encrypt failedsipdroid 数据加密失败
【发布时间】:2013-05-14 08:55:24
【问题描述】:

我想通过使用反向字节顺序制作自定义 sipdroid 客户端。我认为这使得其他 Voip 客户端无法解码这些数据。

于是我阅读了 SipDroid 的代码。我发现 RTP 数据是这样的: 1. AudioRecord.read(原始PCM) 2. 编码(原始PCM,编码数据) 3. rtp_socket.send(rtp_packet) //encodeData是rtp_packet的数据部分

而另一边是: 1. rtp_receive(rtp_packet) 2. decode(encodeData, PCMData) //encodeData是rtp_packet的数据部分 3. AudioTrack.write(PCMData)

所以我修改了 SipdroidSocket 类。在发送方法中,我在开头添加了以下代码。

byte[] b = pack.getData();
reverse(b);
pack.setData(b);

并在receive方法末尾添加如下代码。

    byte[] b = pack.getData();
    reverse(b);
    pack.setData(b);

我想这样,两个客户端就可以正常工作了。但它失败了。而且我不知道原因。请帮我找出原因。谢谢。

【问题讨论】:

  • 听起来您希望您的数据在发送时被加密,但是颠倒字节顺序不会提供这种保护。您显示的代码应该没有任何问题。您是否尝试在不修改的情况下运行它?在那种情况下,它有效吗?
  • 我知道反转方式不会为数据提供足够的保护。我只是用这个作为一个尝试。如果可行,我会将 reverse() 方法更改为一些有用的方式来加密数据。
  • 如果我删除修改。两个客户端工作正常。但是在我的修改下,只有噪音。我用这两种方法打印了一个日志。我发现 send 方法只调用了一次,过程中肯定有一些数据检查。所以发送不成功。
  • 那么你需要检查为什么 send 没有发送你的数据。可能有某种验证,可能是与 RTP 一起使用的本地校验和控件。
  • 是的,我找到了。 RtpPacket 看起来像一个字节数组。但实际上是一个带有一些字节作为标题的结构。所以我改变了相反的过程来保留头部。发送正常。

标签: android voip rtp sipdroid


【解决方案1】:

除非一次收到 2、4、8 个字节,否则不应反转空穴缓冲区。 您应该将数据视为 2,4,8 字节的元素,具体取决于数据的方式 被存储。我在这里看到的代码不起作用。 假设您有一个数据字节缓冲区 0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08 存储为 0x04030201-0x08070605 的 4 字节元素。 反转孔缓冲区将产生0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x01 这是错误的,因为你最终会得到 0x05060708-0x04030201 如果一次反转一个元素(4 个字节)。 请记住,元素的大小取决于值的存储方式

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-01-30
    • 2021-04-18
    • 2014-07-01
    • 2018-02-23
    • 1970-01-01
    • 1970-01-01
    • 2018-08-19
    • 2016-11-12
    相关资源
    最近更新 更多