我的DESKey(BlackBerry API)有什么问题?

时间:2010-07-13 22:25:38

标签: blackberry encryption des

我在BlackBerry JE 4.6.1上开发了一个应用程序,它使用DES algorythm解密来自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的这种行为可能是我无法解密服务器数据的原因吗?

谢谢。

1 个答案:

答案 0 :(得分:0)

预期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 => '@'