У меня есть файл с зашифрованными учетными данными с RC4, Кусок кода, отвечающего писать такие учетные данные в файл выглядит следующим образом:В Perl, в то время как с помощью RC4 я не могу получить обратно зашифрованный текст
sub dummyFunction() {
# Useless stuff for the scope of the problem
# ...
my $dbHost = "localhost";
my $passphrase = "123"; # For example purposes, logic is different.
my $cipher = Crypt::RC4->new($passphrase);
return unpack('H*',$cipher->RC4($dbHost));
}
так что часть кода возвращает что-то вроде: 3F9FDCE3891C6B8851
, но если я попробовать следующее:
sub anotherDummyFunction() {
my $ciphered_text = &dummyFunction();
my $passphrase = "123";
my $cipher = Crypt::RC4->new($passphrase);
print $cipher->RC4(pack('H*',$ciphered_text));
}
Я ожидал увидеть localhost
, но вместо этого, я получаю кучу байт, так как я получил бы вернуть исходный текст?
Я уже проверил с помощью дешифратора RC4 онлайн, с моей кодовой фразой и моей кодировкой с шестнадцатеричным кодированием, а дешифратор RC4 онлайн возвращает localhost
, поэтому я уверен, что зашифрованная строка верна.
Спасибо!
P.S.: Приведенный выше пример работает в изолированной среде, но когда дело доходит до моего сценария, это не так. Я не могу вернуть исходную строку.
Не показывайте нам пример кода, который работает, и сообщите нам, что он не работает в каком-либо другом контексте. Единственное, что мы знаем, это то, что проблема * не * в том, что вы нам показали. – hobbs
Я буду использовать свои умственные навыки отладки, чтобы сказать, что некоторые пробелы попали в '$ ciphered_text' в вашем реальном скрипте. 'pack ('H *', $ ciphered_text)' does ** not ** pack только шестнадцатеричные цифры; он захватывает младшие 4 бита каждого символа в '$ ciphered_text', включая пробельные символы. – cjm
Я уже нашел корень проблемы. Сначала я подумал, что это пробел, но это было не так. Я шифровал другую строку прямо перед этим, но тот был зашифрован правильно. У меня было прозрение, и я подумал, что RC4 может быть кешированием, поэтому я его отменил, и это сработало. – ILikeTacos