Поиск окон запроса от Java

SHA-512 является криптографической (односторонней) хэш-функцией, поэтому прямого способа ее декодирования не существует. Вся цель криптографической хеш-функции заключается в том, что вы не можете отменить ее.

Одна вещь, которую вы можете сделать, это стратегия грубой силы, где вы угадываете то, что было хешировано, затем хешируете его с той же функцией и смотрите, соответствует ли оно. Если хешированные данные не очень легко угадать, это может занять много времени.

6
задан user151019 3 June 2012 в 19:16
поделиться

4 ответа

Возможно, вы захотите взглянуть на одну из технологий интеграции Java-COM. Я лично работал с JACOB (JAva COm Bridge):

Это было довольно громоздко (подумайте, работая исключительно с отражением), но выполнил работу за меня (быстрое доказательство концепции, доступ к MapPoint из Java).

Единственная другая подобная технология, о которой я знаю, это Jawin, но у меня нет личного опыта с ней:

Обновление от 26.04.2009: Просто ради этого я провел дополнительные исследования в Microsoft Windows Search и нашел простой способ интеграции с ним с помощью OLE DB. Вот некоторый код, который я написал в качестве доказательства концепции:

public static void main(String[] args) {
    DispatchPtr connection = null;
    DispatchPtr results = null;
    try {
        Ole32.CoInitialize();
        connection = new DispatchPtr("ADODB.Connection");
        connection.invoke("Open",
            "Provider=Search.CollatorDSO;" +
            "Extended Properties='Application=Windows';");
        results = (DispatchPtr)connection.invoke("Execute",
            "select System.Title, System.Comment, System.ItemName, System.ItemUrl, System.FileExtension, System.ItemDate, System.MimeType " +
            "from SystemIndex " +
            "where contains('Foo')");
        int count = 0;
        while(!((Boolean)results.get("EOF")).booleanValue()) {
            ++ count;
            DispatchPtr fields = (DispatchPtr)results.get("Fields");
            int numFields = ((Integer)fields.get("Count")).intValue();

            for (int i = 0; i < numFields; ++ i) {
                DispatchPtr item =
                    (DispatchPtr)fields.get("Item", new Integer(i));
                System.out.println(
                    item.get("Name") + ": " + item.get("Value"));
            }
            System.out.println();
            results.invoke("MoveNext");
        }
        System.out.println("\nCount:" + count);
    } catch (COMException e) {
        e.printStackTrace();
    } finally {
        try {
            results.invoke("Close");
        } catch (COMException e) {
            e.printStackTrace();
        }
        try {
            connection.invoke("Close");
        } catch (COMException e) {
            e.printStackTrace();
        }
        try {
            Ole32.CoUninitialize();
        } catch (COMException e) {
            e.printStackTrace();
        }
    }
}

Чтобы скомпилировать это, вам нужно убедиться, что JAWIN JAR находится в вашем classpath, и что jawin.dll находится на вашем пути (или java.library.path системное свойство). Этот код просто открывает соединение ADO с локальным индексом поиска Windows Desktop, запрашивает документы с ключевым словом «Foo» и распечатывает несколько ключевых свойств в итоговых документах.

Дайте мне знать, если у вас есть какие-либо вопросы, или нужно, чтобы я что-то прояснил.

Обновление от 27.04.2009: I tried implementing the same thing in JACOB as well, and will be doing some benchmarks to compare performance differences between the two. I may be doing something wrong in JACOB, but it seems to consistently be using 10x more memory. I'll be working on a jcom and com4j implementation as well, if I have some time, and try to figure out some quirks that I believe are due to the lack of thread safety somewhere. I may even try a JNI based solution. I expect to be done with everything in 6-8 weeks.

Update 04/28/2009: Это просто обновление для тех, кто следил и любопытно. Оказывается, нет проблем с многопоточностью, мне просто нужно было явно закрыть ресурсы моей базы данных, поскольку соединения OLE DB предположительно объединены в пул на уровне операционной системы (я, вероятно, в любом случае должен был закрыть соединения ...). Я не думаю, что буду дальнейшими обновлениями к этому. Дайте мне знать, если у кого-то возникнут какие-либо проблемы с этим.

Обновление 05.01.2009: Added JACOB example per Oscar's request. This goes through the exact same sequence of calls from a COM perspective, just using JACOB. While it's true JACOB has been much more actively worked on in recent times, I also notice that it's quite a memory hog (uses 10x as much memory as the Jawin version)

public static void main(String[] args) {
    Dispatch connection = null;
    Dispatch results = null;

    try {
        connection = new Dispatch("ADODB.Connection");
        Dispatch.call(connection, "Open",
            "Provider=Search.CollatorDSO;Extended Properties='Application=Windows';");
        results = Dispatch.call(connection, "Execute",
            "select System.Title, System.Comment, System.ItemName, System.ItemUrl, System.FileExtension, System.ItemDate, System.MimeType " +
            "from SystemIndex " +
            "where contains('Foo')").toDispatch();
        int count = 0;
        while(!Dispatch.get(results, "EOF").getBoolean()) {
            ++ count;
            Dispatch fields = Dispatch.get(results, "Fields").toDispatch();
            int numFields = Dispatch.get(fields, "Count").getInt();

            for (int i = 0; i < numFields; ++ i) {
                Dispatch item =
                    Dispatch.call(fields, "Item", new Integer(i)).
                    toDispatch();
                System.out.println(
                    Dispatch.get(item, "Name") + ": " +
                    Dispatch.get(item, "Value"));
            }
            System.out.println();
            Dispatch.call(results, "MoveNext");
        }
    } finally {
        try {
            Dispatch.call(results, "Close");
        } catch (JacobException e) {
            e.printStackTrace();
        }
        try {
            Dispatch.call(connection, "Close");
        } catch (JacobException e) {
            e.printStackTrace();
        }
    }
}
20
ответ дан 8 December 2019 в 04:55
поделиться

Как показывают несколько постов, вы можете соединить Java и .NET или COM с помощью коммерческих или бесплатных платформ, таких как JACOB, JNBridge, J-Integra и т. Д. На самом деле у меня был опыт общения с одной из этих третьих сторон (дорогой :-)), и я должен сказать, что сделаю все возможное, чтобы избежать повторения этой ошибки в будущем. Причина в том, что в нем много «вуду» вещей, которые вы не можете отладить, очень сложно понять, в чем проблема, когда что-то идет не так.

Решение, которое я бы предложил вам реализовать, - создать простой .NET приложение, которое делает реальные вызовы API поиска Windows. После этого вам нужно установить канал связи между этим компонентом и вашим Java-кодом. Это можно сделать различными способами, например, отправив сообщения на небольшую БД, которую ваше приложение будет периодически извлекать. Или зарегистрируйте этот компонент на компьютере IIS (если он существует) и предоставьте простой WS API для связи с ним.

3
ответ дан 8 December 2019 в 04:55
поделиться

Любая причина, по которой вы не могли просто использовать Runtime.exec () для запроса с помощью search-ms и чтения BufferedReader с результатом команды? Например:

public class ExecTest {
    public static void main(String[] args) throws IOException {
        Process result = Runtime.getRuntime().exec("search-ms:query=microsoft&");

        BufferedReader output = new BufferedReader(new InputStreamReader(result.getInputStream()));
        StringBuffer outputSB = new StringBuffer(40000);
        String s = null;

        while ((s = output.readLine()) != null) {
            outputSB.append(s + "\n");
            System.out.println(s);
        }

        String result = output.toString();
    }
}
1
ответ дан 8 December 2019 в 04:55
поделиться

Существует несколько библиотек для вызова COM-объектов из Java, некоторые с открытым исходным кодом (но их кривая обучения выше), некоторые с закрытым исходным кодом и с более быстрой кривой обучения. Пример закрытого источника - EZCom . Коммерческие, как правило, также фокусируются на вызове java из окон, чего я никогда не видел в opensource.

В вашем случае я бы посоветовал вам сделать вызов в вашем собственном классе .NET (думаю, использовать C #, как это ближе всего к Java, не вдаваясь в спорные J #), и сосредоточиться на создании взаимодействия с .NET DLL. Таким образом, программирование Windows становится проще, а интерфейс между Windows и Java становится проще.

Если вы ищете, как использовать библиотеку Java, то MSDN не то место. Но MSDN поможет вам написать то, что вам нужно, изнутри .NET, а затем посмотрите учебники по библиотеке com о вызове одного или двух методов, которые вам нужны из ваших объектов .NET.

РЕДАКТИРОВАТЬ:

Учитывая обсуждение в ответы об использовании веб-службы, вы могли бы (и, вероятно, вам повезет) создать небольшое приложение .NET, которое вызывает встроенный веб-сервер Java, а не пытаться заставить .NET иметь встроенный веб-сервис и иметь Java как потребителя. вызова. Для встроенного веб-сервера мое исследование показало, что Winstone хорош. Не самый маленький, но гораздо более гибкий.

Чтобы заставить это работать, нужно запустить приложение .NET из Java и заставить приложение .NET вызывать веб-сервис по таймеру или циклу, чтобы увидеть, есть ли запрос, и, если он есть, обработайте его и отправьте ответ.

а затем посмотрите учебники по библиотеке com о вызове одного или двух методов, которые вам нужны из ваших объектов .NET.

РЕДАКТИРОВАТЬ:

Учитывая обсуждение ответов на вопросы об использовании веб-службы, вы можете (и, вероятно, будете иметь повезет) создайте небольшое приложение .NET, которое вызывает встроенный веб-сервер Java, вместо того, чтобы пытаться заставить .NET иметь встроенный веб-сервис и использовать Java как потребителя вызова. Для встроенного веб-сервера мое исследование показало, что Winstone хорош. Не самый маленький, но гораздо более гибкий.

Чтобы заставить это работать, нужно запустить приложение .NET из Java и заставить приложение .NET вызывать веб-сервис по таймеру или циклу, чтобы увидеть, есть ли запрос, и, если он есть, обработайте его и отправьте ответ.

а затем посмотрите учебники по библиотеке com о вызове одного или двух методов, которые вам нужны из ваших объектов .NET.

РЕДАКТИРОВАТЬ:

Учитывая обсуждение ответов на вопросы об использовании веб-службы, вы можете (и, вероятно, будете иметь повезет) создайте небольшое приложение .NET, которое вызывает встроенный веб-сервер Java, вместо того, чтобы пытаться заставить .NET иметь встроенный веб-сервис и использовать Java как потребителя вызова. Для встроенного веб-сервера мое исследование показало, что Winstone хорош. Не самый маленький, но гораздо более гибкий.

Чтобы заставить это работать, нужно запустить приложение .NET из Java и заставить приложение .NET вызывать веб-сервис по таймеру или циклу, чтобы увидеть, есть ли запрос, и, если он есть, обработайте его и отправьте ответ.

Учитывая обсуждение ответов на вопросы об использовании веб-службы, вы можете (и, вероятно, вам повезет) создать небольшое приложение .NET, которое вызывает встроенный веб-сервер Java, а не пытаться заставить .NET иметь встроенный веб-сервис. И пусть Java будет потребителем звонка. Для встроенного веб-сервера мое исследование показало, что Winstone хорош. Не самый маленький, но гораздо более гибкий.

Чтобы заставить это работать, нужно запустить приложение .NET из Java и заставить приложение .NET вызывать веб-сервис по таймеру или циклу, чтобы увидеть, есть ли запрос, и, если он есть, обработайте его и отправьте ответ.

Учитывая обсуждение ответов на вопросы об использовании веб-службы, вы можете (и, вероятно, вам повезет) создать небольшое приложение .NET, которое вызывает встроенный веб-сервер Java, а не пытаться заставить .NET иметь встроенный веб-сервис. И пусть Java будет потребителем звонка. Для встроенного веб-сервера мое исследование показало, что Winstone хорош. Не самый маленький, но гораздо более гибкий.

Чтобы заставить это работать, нужно запустить приложение .NET из Java и заставить приложение .NET вызывать веб-сервис по таймеру или циклу, чтобы увидеть, есть ли запрос, и, если он есть, обработайте его и отправьте ответ.

NET имеет встроенный веб-сервис, а java будет потребителем звонка. Для встроенного веб-сервера мое исследование показало, что Winstone хорош. Не самый маленький, но гораздо более гибкий.

Чтобы заставить это работать, нужно запустить приложение .NET из Java и заставить приложение .NET вызывать веб-сервис по таймеру или циклу, чтобы увидеть, есть ли запрос, и, если он есть, обработайте его и отправьте ответ.

NET имеет встроенный веб-сервис, а java будет потребителем звонка. Для встроенного веб-сервера мое исследование показало, что Winstone хорош. Не самый маленький, но гораздо более гибкий.

Чтобы заставить это работать, нужно запустить приложение .NET из Java и заставить приложение .NET вызывать веб-сервис по таймеру или циклу, чтобы увидеть, есть ли запрос, и, если он есть, обработайте его и отправьте ответ.

0
ответ дан 8 December 2019 в 04:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: