このアルゴリズムを元に戻すのに苦労しています:
decrypt_algorithm = function (text) {
var parser = new TextParser(text);
var decrypt_key = [16, 19, 17, 7, 20, 23, 13, 1, 24, 15, 6, 12, 0, 18, 21, 2, 9, 14, 3, 10, 5, 25, 8, 4, 22, 11];
var text_size = parser.getSize();
var text_size_without_last_part = text_size - 26;
var output = [];
if (text_size_without_last_part > 0) {
for (var m = 0; m < text_size_without_last_part; m += 26) {
var word_to_decrypt = [];
for (var k = 0; k < 26; k++) {
word_to_decrypt[k] = parser.readNextChar()
}
for (var k = 0; k < 26; k++) {
output[m + k] = word_to_decrypt[decrypt_key[k]]
}
}
var parser_position = parser.getPosition();
var last_part_size = text_size - text_size_without_last_part - 1;
if (last_part_text > 0) {
for (var k = 0; k < last_part_size; k++) {
output[text_size_without_last_part + k] = parser.readNextChar()
}
}
}
return output;
};
私はリバース エンジニアリングの知識がないので、関数を「リバース」する方法を説明しているリソースを教えていただければ、非常に役に立ちます。
答えとして正確なコードは必要ありませんが、自分でリバースエンジニアリングする方法に関するいくつかのガイドは本当にありがたいです.
編集1:
一時停止してアルゴリズムについて少し考えた後、私は問題を理解し、思ったより簡単でした。
output[decrypt_key[k]] = word_to_decrypt[m + k]
これを変更するとアルゴリズムが元に戻り、問題が解決します。