0

我有一个 GWT 客户端通过 HTTP 上的 JSON 与 perl 服务器通信。它工作得很好,但有一些隐私问题,我需要加密交易。在做了一些研究之后,似乎最简单/最好的支持选项是使用 TripleDES,客户端使用 gwt-crypto,服务器使用 Crypt:CBC。问题是我不知道如何在两端使用相同的密钥,因为您设置它们的方式似乎完全不同。在 java/gwt 方面,我正在执行以下操作:

_cipher.setKey(Hex.decode("dc7c62768f0d9d514373d520438ff8f8")); // 16 bytes

在 perl 方面,我正在做:

my $cipher = Crypt::CBC->new( -key     => 'dc7c62768f0d9d514373d520438ff8f8',
                -cipher  => 'DES_EDE3');

我尝试了各种密钥方案,但似乎如果我让 gwt 高兴,那么 perl 就不会了,反之亦然。例如,据我所知,以下 perl 应该可以工作,但是当我尝试它时出现“无效密钥”错误:

my $iv = Crypt::CBC->random_bytes(8);
my $key = pack("H*", 'dc7c62768f0d9d514373d520438ff8f8');
my $cipher = Crypt::CBC->new( -key     => $key,
            -literal_key => 1,
            -keysize => 16,
            -header => 'none',
            -padding => 'standard',
            -iv     => $iv,
            -cipher  => 'DES_EDE3'
);

所以,我想我最终可以弄清楚编码问题,我在跳过箍告诉每一方使用什么键时遇到的麻烦。任何帮助是极大的赞赏。

4

1 回答 1

0

事实证明,gwt-crypto 实现密钥处理的方式与 Crypt::DES_EDE3 的方式不兼容。与散列机制有关,所以就有了这个想法。我已经超出了我的时间预算,但如果我再试一次,我将尝试 AES 或普通的旧 DES。我宁愿使用 DES,因为我认为它的负载要轻得多,并且足以满足我的需求,但是 gwt-crypto 没有最好的文档,而且它与 bouncycastle 所基于的 (bouncycastle) 有很大不同我发现的例子不翻译。

于 2013-08-01T23:26:54.110 回答