【问题标题】:What is wrong with my DESKey (BlackBerry API)?我的 DESKey (BlackBerry API) 有什么问题?
【发布时间】:2010-07-13 22:25:37
【问题描述】:

我有一个在 BlackBerry JE 4.6.1 上开发的应用程序,它使用 DES 算法解密来自 WebServer 的信息。 如果我将加密信息发送到服务器,它会被很好地解密。但是如果服务器发送加密数据, 解密后我没有得到正确的值。 密钥应该是相同的,并且加密信息以 base64 编码发送。 在调试过程中我发现,在创建 DESKey 之后,它的内部数据与传递给构造函数的字节数组不同。 例如,如果我以下一种方式创建 DESKey

String keyStr = "2100000A";
DESKey desKey = new DESKey(keyStr.getBytes()); // pass the byte array {'2','1','0','0','0','0','0','A'}

desKey.getData() 方法返回的字节数组 {'2','1','1','1','1','1','1','@'} 不同于初始密钥字节。

那么 DESKey 的这种行为是否可能是我无法从服务器解密数据的原因?

谢谢。

【问题讨论】:

    标签: blackberry encryption des


    【解决方案1】:

    desKey.getData() 行为是预期的。

    doc 声明:

    DES 在 64 位块上运行,并且具有 有效密钥长度为 56 位。在 现实中,密钥是 64 位,但有 使用了 8 位奇偶校验位,这意味着 有效密钥长度仅为 56 位。每八位用于 平价,它是最不重要的 用于奇偶校验的位。

    奇偶校验位definition:

    奇偶校验位或校验位是为了确保一组位中值为 1 的位数是偶数或奇数而添加的位。奇偶校验位被用作最简单的错误检测码形式。

    所以,事情就是这样发生的:

    '2' => 0x32 => 00110010 => 0011001 + (parity bit 0) => 00110010 => 0x32 => '2'
    '1' => 0x31 => 00110001 => 0011000 + (parity bit 1) => 00110001 => 0x31 => '1'
    '0' => 0x30 => 00110000 => 0011000 + (parity bit 1) => 00110001 => 0x31 => '1'
    '0' => 0x30 => 00110000 => 0011000 + (parity bit 1) => 00110001 => 0x31 => '1'
    '0' => 0x30 => 00110000 => 0011000 + (parity bit 1) => 00110001 => 0x31 => '1'
    '0' => 0x30 => 00110000 => 0011000 + (parity bit 1) => 00110001 => 0x31 => '1'
    '0' => 0x30 => 00110000 => 0011000 + (parity bit 1) => 00110001 => 0x31 => '1'
    'A' => 0x41 => 01000001 => 0100000 + (parity bit 0) => 01000000 => 0x40 => '@'
    

    【讨论】:

      猜你喜欢
      • 2016-05-03
      • 2017-07-28
      • 2021-08-02
      • 2019-01-24
      • 1970-01-01
      • 1970-01-01
      • 2020-03-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多