尝试使用TripleDES加密GWT客户端和perl服务器之间的事务时,如何处理密钥?

时间:2013-07-29 23:21:13

标签: perl gwt tripledes

我有一个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'
);

所以,我认为我最终可以找出编码问题,我遇到麻烦,它跳过篮球,告诉每一方使用什么密钥。非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

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