Java UDF w DB2

Zaawansowane serwery baz danych umożliwiają użytkownikom rozszerzanie dostępnej logiki (User-defined routines)  nie tylko w postaci podprogramów napisanych w SQL ale także w innych językach programowania. IBM DB2 umożliwia tworzenie podprogramów w PL/SQL lub w postaci zewnętrznych podprogramów w różnych językach w tym w Javie.  Może się to okazać przydatne na przykład gdy chcemy użyć bibliotek niedostępnych z poziomu PL/SQL. Tak było w moim przypadku - potrzebowałem specyficznych algorytmów kryptograficznych.

Zdecydowałem się na stworzenie funkcji użytkownika w Javie (User Defined Functions). W tym poście pokażę jak stworzyć funkcję UDF używając rekomendowanego sposobu przekazywania parametrów PARAMETER STYLE JAVA. Korzystałem z serwera DB2 9.1 zainstalowanego na systemie AIX 5.3. Read more

Porównanie prędkości kryptograficznych funkcji skrótu

Kryptograficznych funkcji skrótu używa praktycznie każdy programista. Zwykle kryterium wyboru nie jest ich prędkość a odporność na różnego rodzaju ataki. Jest parę własności które taka funkcja skrótu powinna spełniać (preimage resistance, second preimage resistance, collision resistance). Zwykle dobrze jest się kierować zaleceniami Amerykańskiego Narodowego Instytutu Standardów będącego wyznacznikiem dla standardów publicznej kryptografii.  Publikuje on zalecenia dotyczące stosowania kryptograficznych funkcji skrótu. Zaleca między innymi aby nie stosować już funkcji MD5, zaś funkcja SHA-1 powinna być stosowana co najwyżej do 2010 roku. Niemniej jednak istnieją zastosowania w których priorytetem wcale nie jest ogólne bezpieczeństwo lecz któraś ze szczególnych własności i jej jakość dostarczana przez każdą z funkcji jest więcej niż wystarczająca. W jednej z moich implementacji interesowała mnie jedynie własność jednokierunkowości (preimage reistance) na którą ataki są najtrudniejsze a bezpieczeństwo większości standardowych funkcji pod tym względem było dla mnie więcej niż wystarczające. Ważna była prędkość obliczania skrótów dla małych bloków danych.

Przeprowadzone przez innych testy prędkości nie dotyczyły zwykle implementacji we współczesnej Javie (optymalizacja runtime ma tu duże znaczenie). Stanąłem więc przed koniecznością samodzielnego przeprowadzenia testu. Read more

Workspace w NetBeans

Wydaje się, że w NetBeans brakuje odpowiednika workspace znanego z Eclipse. Okazuje się jednak, że taka funkcjonalność istnieje choć nie widać jej w GUI. Read more

enum - zabawy z dekompilatorem

Zastanawiałeś się co tak na prawdę kryje się pod nową (od 5.0) składnią enum w Javie?  Dlaczego enum nie może rozszerzać innej klasy? Przejrzenie zdekompilowanego kodu pozwoli zrozumieć wiele niuansów. Read more

Materiały do 4 Spotkania Śląskiej Grupy Użytkowników Technologii Java

Dnia 10.12.2008 na czwartym spotkaniu Silesia Java User Group prowadziłem prelekcję na temat kryptografii w Javie. Zaskoczyła mnie ilość pytań po prezentacji co uznaję za miarę zainteresowania.

Plan prezentacji: Read more

Kruczki przy użyciu typów zmiennoprzecinkowych

Zgadnij co wypisze poniższy fragment kodu:

                Set iSet = new HashSet();
                Set fSet = new HashSet();
                Set dSet = new HashSet();
		int start = Integer.MAX_VALUE - 10;
		int stop = Integer.MAX_VALUE;
		for (int i = start; i < stop; ++i) {
			iSet.add(i);
			fSet.add((float)i);
			dSet.add((double)i);
		}
		System.out.println(iSet.size());
		System.out.println(fSet.size());
		System.out.println(dSet.size());

Read more

Zmienne wyniki porównań java.net.URL

Zgadnij co wypisze na konsolę taki fragment kodu:

public static void main(String a[]) throws MalformedURLException {
java.net.URL url1 = new java.net.URL("http://o2.pl");
java.net.URL url2 = new java.net.URL("http://tlen.pl");
System.out.println(url1.equals(url2));
}

Zabawne, ale nie będzie to za każdym razem to samo co łamie założenia metody equals. Read more

Zaciemnione hasła w plikach konfiguracyjnych Websphere Application Server

Ostatnio musiałem ręcznie edytować pliki konfiguracyjne Websphere Application Server. Chodziło konkretnie o security.xml dla serwera. Chciałem podmienić keystore z certyfikatem serwera ponieważ został wgrany wadliwy certyfikat i nawet konsola administracyjna nie działała. Żeby to zrobić trzeba wpisać hasło do keystore. Nie jest to jednak taka prosta sprawa - hasła w security.xml są pozaciemniane. Read more

Polskie znaczki na Java console

Wypisywanie polskich znaków (przy pomocy System.out) z programu napisanego w Javie uruchomionego z wiersza poleceń może przyprawić trochę kłopotów. Za globalne ustawienia domyślnego kodowania znaków odpowiada własność systemowa file.encoding ale ustawianie jej podczas działania programu nie wpływa na konsolę. Read more

Java console na i5/OS (iSeries czyli AS/400)

Miałem ostatnio styczność z serwerami iSeries. Serwery iSeries są średnimi serwerami firmy IBM opartymi obecnie na procesorach POWER™. Kiedyś (od 1988 roku) linia ta nazywała się AS400 i do dzisiaj często ta nazwa jest używana jako synonim. Pełna nazwa tej linii to IBM System i. Litera i w nazwie pochodzi od integration. Pracują przeważnie pod kontrolą systemu i5/OS. Serwery te ze względu na wysoki poziom bezpieczeństwa i niezawodności są często stosowane przez instytucje finansowe.

Przedstawię tutaj uruchamianie konsolowych programów Javy w trybie interaktywnym. Jest to dosyć ciekawe bo ten system operacyjny nie jest podobny ani do Windowsa ani do UNIXa. Plik class utworzyłem i skompilowałem po stronie serwera po to, żeby pokazać przykład użycia podstawowych komend systemu (celowo starałem się nie używać unixopodobnego shella QSH). Read more

Next Page »