Загрузка…

Бөгеуiлге орнықты кодтауды программалық жүзеге асыруда Java тiлiн қолдану

Қазiргi техника мен технологияның қарқынды дамыған заманында автоматтандырылған ақпараттық жүйелердегi ақпаратты қорғау және желiдегi жiберiлетiн ақпараттың сенiмдiлiгi мен қауiпсiздiгiн сақтау мәселелерi бүгiнгi таңда аса көкейкестi болып табылады. Байланыс арнасы арқылы жiберiлетiн ақпараттың сенiмдiлiгiн, қауiпсiздiгiн, құпиялылығын, шынайылылығын қамтамасыз ету үшiн ақпаратты қорғаудың түрлi криптографиялық әдiстерi және техникалық, технологиялық және программалық құралдары қолданылады. Жiберiлетiн ақпаратқа қосымша тексеру символдарын енгiзу арқылы желiдегi ақпаратты жiберу кезiнде туындайтын қателердi табуға және тiптi бүлiнген ақпаратты түзетуге болады. Арнадағы жiберiлетiн ақпаратты осылай кодтауды бөгеуiлге орнықты кодтау деп атайды. Мұндай бөгеуiлге орнықты кодтарға қазiргi кезде желiаралық, мобильдi және спутниктiк байланыс арқылы хабар алмасуда кеңiнен қолданылатын Рид-Соломан коды, БЧХ коды, Рид- Маллер коды сияқты және басқа да сызықтық, циклдiк және жималаушы кодтар жатады [1]. Арнадағы ақпаратты жiберудегi қауiпсiздiк пен сенiмдiлiктi арттыру үшiн ақпаратты түрлендiрудiң бiрнеше әдiсiн қатар қолданған тиiмдi. Мұның мысалына каскадты кодтарды, турбо-кодтарды қолдану, сондай-ақ, ақпаратты түрлендiрудiң екi әдiсiн де, яғни кодтау мен шифрлеудi бiрге қолдану жатады. Бөгеуiлге орнықты кодтардың iшiнде қатенi түзететiн кодтар негiзiндегi ашық шифрлеу жүйесiн (мысалы, Хаффман кодын, Рид-Маллер кодын және Диффи-Хеллман алгоритмiн) қолданып ақпараттың қауiпсiздiгi мен бөгеуiлге орнықтылығын қамтамасыз етуге болады. Байланыс арнасы арқылы жiберiлетiн ақпарат көлемiн Хаффман кодымен сығып, тиiмдiлеп алған жөн, өйткенi айнымалы ұзындықты кодтар тобына жататын Хаффман коды тиiмдi, әрi префикстiк код болып саналады, бiрмәндi түрде декодталады. Ақпаратты алдымен Хаффман кодымен тиiмдiлеп алу ақпараттық артықтықты азайта отырып, жад көлемiн кiшiрейтуге және ақпараттың байланыс арнасы арқылы жiберiлу жылдамдығын арттыруға мүмкiндiк бередi. Сонымен қатар, Хаффман коды жиi кездесетiн символдарды қысқа кодтармен, ал сирек кездесетiн кодтарды ұзын кодтармен алмастыру арқылы ақпарат көлемiн арнаға жiбергенге дейiн 80 пайызға дейiн сығуға мүмкiндiк бередi [2]. Бұдан соң кодталған ақпараттың құпиялылығы мен тұтастығын қорғау және сенiмдiлiгiн арттыру мақсатында Диффи-Хеллман кiлттер алмасуын қолдана отырып, ақпарат AES симметриялық шифрiмен шифрленедi. Мұнда Диффи-Хеллман алгоритмiнде 128 биттi кiлттер ұзындығы қолданылады. Шифрленген жасырын ақпарат арнаға жiберiлер алдында Рид-Маллер кодымен кодталады. Бұл код қатенi түзететiн код ретiнде қолданылады. Рид-Маллер коды кодтық комбинациядағы қатар тұрған 3 қатеге дейiн түзете алады. Хаффман кодымен тиiмдiленiп, сығылған ақпаратты арнаға Рид-Соломан, БЧХ, Файр сияқты қатенi түзету дәрежесi жоғары кодтармен кодтап жiберу арқылы да бөгеуiлге орнықтылықты және желiдегi бүлiнген ақпаратты қалпына келтiрiп, декодтаудың жоғары дәрежесiн қамтамасыз етуге болады. Бөгеуiлге орнықты кодтауды жүзеге асыратын программалық құрал-саймандар, әзiрлеу ортасы кодтау мен декодтауды тиiмдi жүзеге асыратындай болуы тиiс. Әдетте, программа әзiрлеушiлер программалау ортасын анықтағанда программалаудағы жаңа технологияларды қолдануға, желi жағдайында да жұмыс iстейтiн, неғұрлым икемдi, оңай масштабталатын қолданбаларды жасауға мүмкiндiк беретiн, жүйелiк шектеулердi аз талап ететiн, функциональдық және интерфейстiк мүмкiндiктерi мол программалау тiлiн таңдауға тырысады. Сондай тiлдердiң бiрi — қазiргi кезде аса танымал, келешегi мен функциональды мүмкiндiктерi зор Java тiлi. Java тiлi — бұл Internet желiсiнде жұмыс iстейтiн объектiлi-бағытталған, платформалы- 35 Л.Н. Гумилев атындағы ЕҰУ Хабаршысы — Вестник ЕНУ им. Л.Н. Гумилева, 2011, №4 тәуелсiз, сонымен қатар желi iшiнде жұмыс iстейтiн үлестiрiлген қолданбаларды жасауға қолданылатын программалау тiлi. Java тiлiнде жазылған программаларды бiрнеше негiзгi категорияларға бөлуге болады [3] : Қолданба (application) — «кәдiмгi»қолданбалы программаның аналогы. Апплет (applet) — WWW-құжат терезесiнде браузердiң басқаруымен жұмыс атқаратын мүмкiндiктерi шектелген арнайы программа. Java программалау жүйесi шағын интерактивтi қолданбалы программаларды, яғни апплеттердi тарату үшiн World Wide Web (WWW) жүйесiн қолдануға мүмкiндiк бередi. Апплеттер Internet серверлерiнде орналасып, желiде таратылады, клиентке желi арқылы тасымалданады, автоматты түрде орнатылады және WWW құжатының бөлiгi ретiнде орнында орындалуға жiберiледi. Клиент компьютерiндегi ақпараттың қауiпсiздiгiн қамтамасыз ету мақсатында апплетке клиент компьютерi қорларына қатынауға шек қойылған, сондықтан да ол жанама мультимедиалық интерфейстi бере алады және дисктегi сақталған деректерге ешқандай ақау келтiрмей күрделi есептеулердi жүргiзе алады. Сервлет (servlet) — WWW-да сервер жағынан жұмыс iстейтiн мүмкiндiктерi шектелген арнайы программа. WWW-құжаттарды сервер жағынан программалау үшiн JSP технологиясы (Java Server Pages — Java Серверлiк Беттерi) шеңберiнде қолданылады. Серверлiк қолданба (Enterprise application) — сервер жағында көп мәрте қолдануға арналған программа. Кiтапхана (Java Class Library — кластар кiтапханасы, немесе NetBeans Module — NetBeans платформасының модулi) — бұл кiтапхананы Javaда жазылған программалар көп мәрте қолдануға арналған. Java қолданбалары кез келген компьютерде, тiптi оның архитектурасына тәуелсiз түрде орындалатын, тасымалдана алатын кодтар түрiнде болады. Осы кезде генерацияланатын виртуалды код виртуалды Java-машинадағы (JVM — Java Virtual Machine) виртуалды код интерпретаторында орындалатын нұсқаулардың жиынтығы болып табылады. Клиенттерге сервердегi қолданбаларға және деректер базасына қатынауға мүмкiндiк беретiн JSP ( Java Server Pages ) және сервлеттер өте кең ауқымда таралуға мүмкiндiк алды. Java тiлiнде жазылған программалар кластар жиынтықтарынан тұрады және .java кеңейтiлiмi бар мәтiндiк файлдарда сақталынады. Компиляциялау барысында программа мәтiнi .class кеңейтiлiмi бар екiлiк файлдарға аударылады. Мұндай файлдар байт-кодтардан тұрады, яғни абстрактiлi Java-процессорға арналған процессордың командалары және оларға арналған деректердiң тiзбегi байт-кодта көрсетiледi. Байт-код кез-келген компьютерде орындалуы үшiн Java-машина оны қажеттi процессорға сәйкес келетiн нұсқауға аударады. Алдымен байт-код әрқашан да түсiндiрiледi, яғни қандай да бiр Java-процессордың нұсқаулары кездескен жағдайда ол компьютердiң процессорының нұсқауларының тiзбегiне түрленедi. Операциялық жүйенiң қолданбасы операциялық жүйе құралдарының көмегiмен орындауға жiберiледi. Ал Java қолданбасы болса, өз кезегiнде операциялық жүйенiң қолданбасы болып табылатын виртуалды Java-машинасының арқасында орындауға жiберiледi. Сондықтан да, алдымен Java-машина орындауға жiберiледi. Ол параметр ретiнде кластың компиляцияланған коды бар файлдың атын алады. Осы класта main деген атпен iшкi программа орындалуға жiберiледi. Javaда жазылған қолданбалар интерфейстi қолданушыға қолайлы етумен қатар, жұмысты жылдам орындауға мүмкiндiк бередi. Бөгеуiлге орнықты кодтауды программалық жүзеге асыруда компьютерлер (сервер және клиент) арасындағы байланысты орнату және байланыс болмаған жағдайда баптау жасау қажет болады. Байланыстың дұрыс орнатылуы ақпараттың дұрыс жiберiлуiнiң алғышарты болып табылады. Клиент және сервер арасында бөгеуiлге орнықты етiп кодталған ақпаратты жiберу үшiн байланысты орнатуға арналған клиент жағының Javaда жазылған қолданба кодының фрагментi келесi түрде болады: ….. try 36 Б.З. Андасова { portYou = Integer.parseInt(PORT.getText()); System.out.println( «UDP Client Application. Server address: «+ HOST.getText() + «/»+ portYou); hostYou = InetAddress.getByName(HOST.getText()); DatagramPacket Packet = new DatagramPacket(«i serv».getBytes(), «i serv».length(),hostYou,portYou); Sock.send(Packet); System.out.println( «pack send»); Sock.receive(Packet); System.out.println( Packet.getAddress()+»/»+ Packet.getPort()); JOptionPane.showMessageDialog(this, «Локальная связь найдено»+» n»+ Packet.getAddress()+»/»+ Packet.getPort(), «Установка связи», JOptionPane.INFORMATION_MESSAGE); Reciev_B.setEnabled(true); } catch(Exception ioe) { System.out.println(ioe.toString()); } ….. Бөгеуiлге орнықты етiп кодталған ақпаратты қабылдау үшiн сервер жағының Javaда жазылған қолданба кодының фрагментi келесi түрде болады: … try { byte buf[] = new byte[256]; int lenght; System.out.println(«Listening…»); DatagramPacket Packet = new DatagramPacket(buf, buf.length); Sock.receive( Packet ); System.out.println(«Client address «+ Packet.getAddress() + «/»+ Packet.getPort() ); HOST.setText(Packet.getAddress().toString().substring(1,Packet.getAddress().toString().length() )); PORT.setText(+Packet.getPort()); System.out.println(new StringBuffer( new String(Packet.getData(),0,Packet.getLength()) )); Sock.send( Packet ); System.out.println(«связь установлена»); JOptionPane.showMessageDialog(this, «Локальная связь установлена успешно»+» n»+ Packet.getAddress()+»/»+ Packet.getPort(), «Установка связи», JOptionPane.INFORMATION_MESSAGE); Reciev_B.setEnabled(true); } catch(IOException excpt) { System.err.println(«Cвязь не найдена»); } … Java тiлiнiң желiдегi түрлi ақаулар мен бүлiнулердi анықтау және баптау үшiн қолданылатын утилиттерi, кеңiнен таралған желiлiк хаттамалармен жұмыс iстеуге арналған құралдары бар. Желiдегi OSI моделiнiң қай деңгейiнде бүлiну болғанын немесе желiлiк хаттамалардың 37 Л.Н. Гумилев атындағы ЕҰУ Хабаршысы — Вестник ЕНУ им. Л.Н. Гумилева, 2011, №4 қайсысы дұрыс бапталмағанан анықтайтын утилиттер бар. Ping утилитi желiаралық басқарушы хабарлар хаттамасын ICMP (Internet Control Message Protocol) қолданып желiлiк деңгейдегi қатенi анықтайды. Оны қолдану форматы: ping 194.87.0.50 (мұндағы 194.87.0.50 — алыстағы компьютердiң IP-адресi). Егер желi дұрыс жұмыс iстесе, алыстағы компьютерден жауап тосу уақыты мен дестенiң «өмiрiнiң»уақыты қайтарылады. Route утилитi маршруттар кестесiн қарау және редакторлеу үшiн қолданылады. Маршрутты қосу командасы: route ADD 157.0.0.0 MASK 255.0.0.0 157.55.80.1; мұндағы 157.0.0.0 — қашықтағы желi, 255.0.0.0 — қашықтағы желi маскасы, 157.55.80.1 — желiге қатынауды iске асыратын маршрутизатор. Маршрутты жою командасы: route DELETE 157.0.0.0. Netstat утилитi қайсы порттар ашық екенiн және желi түйiндерi арасында қандай порттармен деректер жiберiлiп жатқанын анықтауға мүмкiндiк бередi. Желiлiк хаттамалармен жұмыс iстейтiн кластар java.net дестесiнде орналасқан. Бұл дестенiң iшiндегi ең қарапайымы URL класының көмегiмен Интернеттегi ақпаратқа қатынауға арналған программалық интерфейс uniform resource locator (URL) құруға болады. Оның форматы: protocol://host:port/resource түрiнде болады, мұндағы protocol — байланыс үшiн қолданылатын хаттама аты (Java TCP/IP мен UDP хаттамаларын қолдайды); host — бұл IP- адрес, немесе қатынау жасалатын сервердiң DNS-аты; port — сервердiң портының нөмiрi (егер порт көрсетiлмесе, таңдалған хаттама үшiн үнсiз келiсiлген мән қолданылады, FTP порты — 21, telnet — 23, HTTP — 80); resource — сұратылған ресурс аты, ол құрама да болуы мүмкiн, мысалы: ftp://myserver.ru/pub/docs/Java/JavaCourse.txt Екi компьютер арасында TCP-байланысты орнатқанда төрт сан анықталады: екi компьютердiң IP-адрестерi мен порттары. Мысалы , егер қолданушы өз компьютерiнен 194.11.22.33 браузер арқылы web-серверге 213.180.194.129 қатынаса, бұл мынандай 194.11.22.33:10123-213.180.194.129:80 (10123 кез келген бос порт нөмiрi) байланыстың iске асқанын бiлдiредi. «Сокет»(socket) терминi «IP-адрес: порт»жұбын, яғни желiлiк қатынаудағы адрестiк нүктенi бiлдiредi. URL класында төрт конструктор бар: 1) URL (String spec) конструкторы арқылы ресурс адресi берiледi; 2) URL (String protocol, String host, int port, String file) және 3) URL(String protocol, String host, String file) конструкторлары жеке компоненттерiн көрсету арқылы URL-дi жасайды; 4) URL (URL context, String spec) бұрыннан бар URL-дi сiлтемелiк контекст ретiнде қолданып, осы контекст негiзiнде жаңа URLжасауға мүмкiндiк бередi. Java тiлi InetAddress класының көмегiмен Интернетке қабылданған абоненттер адрестерiн қолдайды. Интернетте адрестеудi жүзеге асыру үшiн қарапайым, жеңiл есте сақталатын символдық аттармен жұмыс iстейтiн қызметтiк функциялар қолданылады. Бұл функциялар символдық аттарды 32-биттiк адрестерге айналдырады. InetAddress класында қолданушыға қолжетiмдi құрылымдар жоқ. Осы кластың объектiлерiн құру үшiн оның фабрикалық әдiстерiнiң бiреуiн қолдану керек болады. Фабрикалық әдiстер — бұл сiлтеменi өзi тиесiлi класс объектiсiне қайтаратын қарапайым статикалық әдiстер. Осы жағдайда, InetAddress класының өкiлдердi құру үшiн пайдалануға болатын үш түрлi әдiсi бар. Бұл әдiстер getLocalHost, getByName және getAllByName. Төменде көрсетiлген қолданба коды жұмыс iстеп отырған компьютердiң, локальды пошталық түйiннiң және мекеменiң WWW-түйiнiнiң аты мен адресi шығарады: InetAddress Address = InetAddress.getLocalHost(); System.out.println(Address); Address = InetAddress.getByName(«mailhost»); System.out.println(Address); InetAddress SW[] = InetAddress.getAllByName(«www.enu.kz»); System.out.println(SW); 38 Б.З. Андасова InetAddress класында фабрикалық әдiстермен қайтарылған объектiлермен қолдануға болатын статикалық емес әдiстер бар: getHostName() Internet адресiнде көрсетiлген объектiге сәйкес келетiн түйiннiң символдық атынан тұратын жолды қайтарады. getAddress() көрсетiлген объектiде сақталатын, Internet адресi жазылған желiде қолданылатын төрт элементтен тұратын байттық массивтi қайтарады. toString() түйiн аты мен оның адресi жазылған жолды қайтарады. Дейтаграммалар немесе UDP (User Datagram Protocol) хаттамасының дестелерi — желiге «fire-and-forget»(ату және ұмыту) принципi арқылы жiберiлетiн ақпараттар дестесi. UDP ақпараттарды жiберу кезiнде жiберiлген ақпараттарды тексерудi және растауды қарастырмайды. UDP пакетiн қандай да бiр адрес бойынша жiберу кезiнде оның қабылдану мүмкiндiгiне және осы жiберiлген адрес бойынша осындай дестелердiң қабылданатынына кепiлдiк бере алмайды. Осыдан келiп, дейтаграмманы қабылдаған кезде осы дестенiң жолда бүлiнгенiн немесе осы ақпаратты жiберушiнiң әлi де болса алушыдан оның қабылданғанын растауын күтiп отырғанын бiле алмайсыз. Java дейтаграммаларды UDP хаттамасының негiзiнде жүзеге асырады. Ол үшiн екi класты қолданады: DatagramPacket класының объектiлерi деректерi бар контейнерлерден тұратын болса, aл DatagramSocket — бұл DatagramPacket объектiлерiн жiберу және қабылдау кезiнде қолданылатын механизм. TCP/IP-сокеттерi Internet түйiндерi арасындағы байланысқан ағындармен жұмыс iстеуге бағытталған. Сокеттердi Java-да енгiзу-шығару жүйелерiн программалармен байланыстыру үшiн пайдалануға болады. Бұл программалар локальды машинада, немесе Internet-тiң кез- келген түйiнiнде орындала алады. DatagramSocket класынан Socket класының объектiлерiнiң айырмашылығы клиент пен сервер арасында жоғары сенiмдi тұрақталған байланысты қамтамасыз ете алады [3]. Java-ның java.net дестесiнде Socket және ServerSocket кластары бiр-бiрiнен өте қатты ерекшеленедi. ServerSocket клиент онымен байланысты жүзеге асырғанға дейiн күтiп тұрады, ал сол уақытта қарапайым Socket өзi байланысуға тиiс бiр клиенттiң қолжетiмсiздiгiн қате ретiнде көрсетедi. Socket объектiсiн құру кезiнде Internet түйiндерi арасында байланыс бiр уақытта орнатылады. Сокеттердi құруда екi құрылым қолданылады: Socket(String host, int port) құрылымы локальды машина мен Internet түйiнiнiң аты құрылымға жiберiлiп қойылған көрсетiлген порты арасындағы байланысты орнатады. Бұл құрылым UnknownHostException және IOException шығаруларын тудыра алады. Socket(InetAddress address, int port) құрылымы да алдыңғы құрылым атқаратын жұмыстарды орындайды. Бiрақ байланысты орнатуға қажеттi түйiн жол түрiнде емес, InetAddress объектiсi ретiнде көрсетiледi. Бұл құрылым тек қана IOException тудыра алады. Socket объектiсiнен кез-келген уақытта өзi жалғанған Internet адресi немесе порт нөмiрi туралы ақпараттарды алуға болады. Ол үшiн келесi әдiстер қызмет атқарады: getInetAddress() әдiсi Socket объектiсiмен байланысқан InetAddress объектiсiн қайтарады. getPort() әдiсi байланыс орнатылған қашықтықтағы түйiннiң порт нөмiрiн қайтарады. getLocalPort() әдiсi көрсетiлген объект жалғанған локальды порттың нөмiрiн қайтарады. Java серверлер сокетiн де қолдайды. Internet серверлерiн құру үшiн ServerSocket класының объектiлерiн пайдалану керек. ServerSocket объектiсiн құрған кезде, ол өзiн жүйеде тiркейдi, яғни клиенттердiң байланысын қамтамасыз етедi. Бұл кластың accept() әдiсiн шақыру кезiнде ол iшкi процестi қандай да бiр клиент сәйкес келетiн портпен байланыс орнатқанға дейiн тоқтата тұрады. Байланыс орнатылғаннан кейiн accept() әдiсi шақыртылған iшкi процеске өзiнiң қарапайым Socket объектiсiн қайтарады. Мына қолданба кодының мысалы «timehost»серверiнiң 880 портымен байланысты ашып, одан деректердiң алынуын көрсетедi [3]: 39 Л.Н. Гумилев атындағы ЕҰУ Хабаршысы — Вестник ЕНУ им. Л.Н. Гумилева, 2011, №4 import java.net.*; import java.io.*; class TimeHost { public static void main(String args[]) throws Exception { int c; Socket s = new Socket(«timehost.starwave.com»,880); InputStream in = s.getInputStream(); while ((c = in.read()) != -1) { System.out.print( (char) c); } s.close(); } } Берiлген URL-дегi нақты ақпаратты алу үшiн URL негiзiнде openConnection() әдiсiн қолданып, URLConnection объектiсiн құру керек. URLConnection — URL адресiнде көрсетiлген алыстағы ресурстың қасиеттерiн тексеру немесе iшiндегiлерiн алу үшiн қолданылатын объект. Төмендегi кодта URLConnection-дi URL объектiсi арқылы шақыртылған openConnection әдiсi арқылы құрып, осы құрылған объектiнi құжаттың құрамы мен құрылымын алу үшiн қолдану көрсетiлген [3]: import java.net.*; import java.io.*; class localURL { public static void main(String args[]) throws Exception { int c; URL hp = new URL(«http», «127.0.0.1», 80, «/»); URLConnection hpCon = hp.openConnection(); System.out.println(«Date: «+ hpCon.getDate()); System.out.println(«Type: «+ hpCon.getContentType()); System.out.println(«Exp: «+ hpCon.getExpiration()); System.out.println( «Last M: «+ hpCon.getLastModified()); System.out.println(«Length: «+ hpCon.getContentLength()); if (hpCon.getContentLength() > 0) { System.out.println(-== Content ===»); InputStream input = hpCon.getInputStream(); int i=hpCon.getContentLength(); while (((c = input. read()) != -1) && (–i > 0)) { System.out.print((char) c); } input.close(); } else { System.out.println(«No Content Available»); } } } Бұл қолданба коды 80 порт бойынша (компьютерде Web-сервер орнатылуы тиiс) локальды желiмен HTTP-байланыс орнатып, үнсiз келiсiм бойынша анықталған құжатты сұрайды (әдетте, index.html), одан соң программа құжаттың тақырыбын, құрамын көрсетедi. Осылайша, клиент және сервер жағындағы кодтауды жүзеге асыратын қолданбаларда ақпаратты сенiмдi түрде жiберу мен қабылдау үшiн Javа тiлiнiң желiлiк программалаудағы 40 Б.З. Андасова мүмкiндiктерiн қолдануға болады.

Comments

So empty here ... leave a comment!

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Sidebar