Я пытаюсь взять пароль из формы, зашифровать его с помощью RSA в сценарии java и отправить форму.
Когда форма получена с помощью кода Perl, она расшифровывает пароль. Я смог получить java-скрипт и Perl, используя один и тот же ключ RSA, и я могу расшифровать сообщения, зашифрованные в java-скрипте с помощью java-скрипта, и сообщения, зашифрованные в Perl с помощью Perl.
Следующим шагом является шифрование в java-скрипте и дешифрование в Perl. После многих разочарований я почти на месте, но расшифрованная строка возвращается назад:
Clear Text Here!
Зашифровывается в Javascript и отправляется по почте.
Затем Perl пытается расшифровать, и создается следующее
������������������������������������������������ereh txet raelC
Как видите, все наоборот. Странные символы - результат того, что библиотека javascript дополняет строку нулями.
Я подозреваю, что это может быть связано с порядком байтов, но мои эксперименты с этой целью до сих пор приводят к суете.
Я использую пакет perl Crypt :: OpenSSL :: RSA;
И javascript rsa и связанные математические библиотеки, написанные Дейвом Шапиро, найдены здесь: http://ohdave.com/rsa/
Библиотека javascript RSA возвращает свое значение в виде десятичного представления двоичного файла. Я передаю это в объект Crypt :: OpenSSL :: Bignum, чтобы преобразовать его обратно в двоичный код для использования в perl-коде.
Код шифрования:
function doEncryption(key, ptextID, ctextID) {
$(ctextID).val("Encrypting...");
$(ctextID).val(encryptedString(key, $(ptextID).val()));
}
И расшифровочный код:
sub java_decrypt {
my $message = shift;
my $rsa = shift;
$rsa->use_no_padding();
my @blocks = split ' ', $message;
my $decmessage = "";
foreach my $block (@blocks) {
my $bitz = Crypt::OpenSSL::Bignum->new_from_decimal($block);
$decmessage .= $rsa->decrypt($bitz->to_bin());
}
$rsa->use_pkcs1_oaep_padding();
#$decmessage = reverse $decmessage;
#$decmessage =~ s/\0//g;
return($decmessage);
}
Две строки, закомментированные в конце, исправят проблемы с расшифровкой в обратном направлении и дополнением, но я не знаю, доверяю ли я этому. Если он зашифрован в perl, он получается правильным способом, поэтому, если есть лучший способ решить эту проблему (переключить порядковый номер двоичной строки?), Я бы предпочел это.
Я пытался обменять порядок байтов с пакетом, но это только вознаградило меня бредом. И только в случае, если его спросят, конкатенация строк дешифрованного сообщения не вступает в игру, так как сообщение в настоящее время находится в одном 64-байтовом блоке.