我有一个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'
);
所以,我认为我最终可以找出编码问题,我遇到麻烦,它跳过篮球,告诉每一方使用什么密钥。非常感谢任何帮助。
答案 0 :(得分:0)
事实证明,gwt-crypto如何实现密钥处理与Crypt :: DES_EDE3的方式不兼容。与散列机制有关,所以有了这个想法。我已经超出了我的时间预算,但如果我再给它一次,我将尝试AES或普通的旧DES。我宁愿使用DES,因为我认为它将是一个更轻的负载并且足以满足我的需求,但gwt-crypto没有最好的文档,并且它与基于(bouncycastle)的bouncycastle不同我发现的例子没有翻译。