У меня есть клиент GWT, разговаривающий с perl-сервером через JSON через HTTP. Он отлично работает, но есть некоторые проблемы с конфиденциальностью, и мне нужно зашифровать транзакции. После небольшого исследования кажется, что самый простой/наилучший поддерживаемый вариант — это пользователь 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'
);
Итак, я думаю, что в конечном итоге смогу выяснить проблемы с кодированием, с чем у меня возникают проблемы, когда я прыгаю через обручи, чтобы сказать каждой стороне, какой ключ использовать. Любая помощь приветствуется.