You are on page 1of 4

‫ﺗﺷﻔﯾر اﻟﻣﻌﻠوﻣﺎت ﺑﺎﺳﺗﺧدام ﻟﻐﺔ ‪java‬‬

‫ﻣﻘدﻣﺔ ‪:‬‬
‫ﻓﻲ ﺑﺎدئ اﻷﻣر ﺣﺗﻰ ﻧﺗﻣﻛن ﻣن ﺗﺷﻔر أي ﻣﻠف وأرﺳﻠﮫ ﻟﻠطرف اﻟﺛﺎﻧﻲ ﻻزم ﯾﻛون ﻋﻧدي ﻣﻔﺗﺎح وھذا اﻟﻣﻔﺗﺎح ﻻزم‬
‫ﯾﻛون ﻓﺳﮫ ﻋﻧد اﻟطرف اﻟﺛﺎﻧﻲ‬

‫ﯾﻌﻧﻲ ﺗﺧﯾل ﻣﻌﻲ اﻧﮫ ﯾوﺟد ﺻﻧدوق ووﺿﻌت ﻓﯾﮫ ﻣﻌﻠوﻣﺎت وﻗﻔﻠﺗﮫ ﻛﻲ ﻻ ﯾﺗﻣﻛن أﺣد ﻣن اﻟوﺻول إﻟﻰ ﺗﻠك اﻟﻣﻌﻠوﻣﺎت‬

‫واﻵن اﻟطرف اﻟﺛﺎﻧﻲ ﻣن اﻟﻣﻔﺗرض ﯾﻛون ﻋﻧده ﻧﻔس اﻟﻣﻔﺗﺎح ﺣﺗﻰ ﯾﺗﻣﻛن ﻣن ﻓﺗﺢ اﻟﺻﻧدوق وأﺧذ اﻟﻣﻌﻠوﻣﺎت ﻣﻧﮫ‬

‫ﻓﺄول ﺧطوة ھﻲ ﺗوﻟﯾد اﻟﻣﻔﺗﺎح‬

‫ﺗﻣﻛﻧﻧﺎ ﺟﺎﻓﺎ ﺑﺄن ﺗﻌطﯾﻧﺎ ﺻف ﺟﺎھز ﻟﻼﺳﺗﺧدام وھو ‪ KeyGenerator‬ﺣﯾث ﯾﻘوم ﺑﺈﻧﺷﺎء ﻣﻔﺗﺎح ﺣﺳب ﺧوارزﻣﯾﺔ‬
‫اﻟﺗﺷﻔﯾر اﻟﻣﻣررة ﺑﺎﻟوﺳﯾط‬

‫ﺳﻧﺑﻧﻲ ﺻف اﺳﻣﮫ ‪SecurityClass‬‬

‫وﺿﻣن ﺑﺎﻧﯾﮫ ﺳﻧﻛﺗب ﻣﺎ ﯾﻠﻲ‬

‫{ )(‪public SecurityClass‬‬

‫{ ‪try‬‬

‫ھﻧﺎ طﻠﺑﻧﺎ ﻣﻔﺗﺎح ھذا اﻟﻣﻔﺗﺎح ﻟﻧﺳﺗﺧدم ﺧوارزﻣﯾﺔ اﻟـ;)"‪k = KeyGenerator.getInstance("DES‬‬


‫‪DES‬‬

‫‪ KK‬ھﻧﺎ أﻧﺷﺄﻧﺎ اﻟﻣﻔﺗﺎح وأﺻﺑﺢ ھو;)(‪kk = k.generateKey‬‬

‫{ )‪} catch (NoSuchAlgorithmException ex‬‬

‫}‬

‫}‬

‫ﻣﻼﺣظﺔ ‪ :‬إن ﺧوارزﻣﯾﺔ اﻟﺗﺷﻔﯾر ھﻲ اﻟﻣﺳؤوﻟﺔ ﻋن ﺗوﻟﯾد ﻣﻔﺗﺎح ﯾﻛون ﻣﻌﻘد وﻻ ﯾﺳﺗطﯾﻊ أﺣد أن ﯾوﻟد ﻧﻔس اﻟﻣﻔﺗﺎح‬
‫ﻷﻧﮭﺎ ﺗﺗﺑﻊ ﻋﻣﻠﯾﺎت ﻣﻌﻘدة ﻓﻲ ﻋﻣﻠﯾﺔ ﺗوﻟﯾد اﻟﻣﻔﺗﺎح ‪ ،‬ﻣن اﻟﺧوارزﻣﯾﺎت اﻟﻣﺳﺗﺧدﻣﺔ ﺧوارزﻣﯾﺔ اﻟﺟﻣل وﺧوارزﻣﯾﺔ‬
‫‪ DES‬وھﻧﺎك ﺧوارزﻣﯾﺎت أﺧرى‬

‫‪1‬‬
‫م‪.‬ﻣﺎﺟد اﻟﺟﻣﯾﺔ ‪mjemmjeh@hotmail.com‬‬ ‫‪2010-08-27‬‬ ‫اﺳﺗﺧدام اﻟﺗﺷﻔﯾر ﺑﺎﻟﺟﺎﻓﺎ‬
‫واﻵن ﺳﻧﻛﺗب اﻟﺗﺎﺑﻊ اﻟذي ﯾﻘوم ﺑﻌﻣﻠﯾﺔ اﻟﺗﺷﻔﯾر‬

‫{ ‪public static void encrypt() throws Exception‬‬

‫ھﻧﺎ طﻠﺑﻧﺎ ﺧوارزﻣﯾﺔ اﻟﺗﺷﻔﯾر ;)"‪Cipher c = Cipher.getInstance("DES/ECB/PKCS5Padding‬‬


‫وطﺑﻌﺎ ھﻲ ﻻزم ﺗﻛون ﻧﻔس اﻟﺧوارزﻣﯾﺔ ﯾﻠﻲ اﺳﺗﺧدﻣﺗﮭﺎ ﻓﻲ ﺗوﻟﯾد اﻟﻣﻔﺗﺎح‬

‫ﻧﺣن ﻧﺣﺗﺎج ﻟﻠﺧوارزﻣﯾﺔ اﻟﺗﺷﻔﯾر ﻛﻲ ﻧﺷﻔر اﻟﻣﻌﻠوﻣﺎت اﻟﺗﻲ ﻧرﯾد وﺿﻌﮭﺎ ﺑداﺧل اﻟﺻﻧدوق‬

‫ھﻧﺎ ھﯾﺋﻧﺎ اﻟﻐرض اﻟذي ﻧرﯾد أن ﻧﺳﺗﺧدﻣﮫ ﻓﻲ ﻋﻣﻠﯾﺔ اﻟﺗﺷﻔﯾر ;)‪c.init(Cipher.ENCRYPT_MODE, kk‬‬
‫ﺑﺎﻟﻣﻔﺗﺎح اﻟذي وﻟدﻧﺎه ﻓﻲ اﻟﺑﺎﻧﻲ وھﯾﺋﻧﺎ اﻟﻐرض ﻛﻲ ﯾﻛون ﻓﻲ وﺿﻊ اﻟﺗﺷﻔﯾر‬

‫ھﻧﺎ ﻓﻘط أﺧذﻧﺎ ﻣﻘﺑض ﻋن اﻟﻣﻠف اﻟذي ﻧرﯾد أن ﻧﺷﻔره وھو ‪exam.xml‬‬

‫‪BufferedReader inS = new BufferedReader(new‬‬


‫;))"‪FileReader("h p://localhost:8080/test/exam.xml‬‬

‫ھﻧﺎ ﻗرأﻧﺎ ﺳطر واﺣد ﻓﻘط ﻣن اﻟﻣﻠف وﺧزﻧﺎه ﺑﺎﻟﻣﺗﺣول‪temp‬‬

‫;)(‪String temp = inS.readLine‬‬

‫ھﻧﺎ ﺳﯾدﺧل ﺑﺣﻠﻘﺔ ﺣﺗﻰ ﯾﺻﺑﺢ اﻟﻣﺗﺣول ‪ temp‬ﻓﺎرغ‬

‫{ )‪while (temp != null‬‬

‫ﺣوﻟﻧﺎ اﻟﺳطراﻟذي ﻗرأﻧﺎه إﻟﻰ ﺑﺎﯾت;)(‪byte[] arg0 = temp.getBytes‬‬

‫ھﻧﺎ اﻟﺑﺎﺗﺎت اﻟﻧﺎﺗﺟﺔ أدﺧﻠﻧﺎھﺎ إﻟﻰ اﻟﺧوارزﻣﯾﺔ وھﻲ ﺑﻧﻔﺳﮭﺎ ﺳﺗﺷﻔرھم وﺗرﺟﻊ ;)‪arg0 = c.doFinal(arg0‬‬
‫ﻟﻧﺎ ﻧﺎﺗﺞ اﻟﺗﺷﻔﯾر‬

‫واﻵن أﺻﺑﺢ ﻟدي ﻣﻌﻠوﻣﺎت ﻣﺷﻔرة ﻣﺧزﻧﺔ داﺧل اﻟﻣﺗﺣول ‪arg0‬‬

‫وھﻧﺎ ﻓﻘط ﻛﺗﺑﻧﺎ اﻟﻣﻌﻠوﻣﺎت اﻟﻣﺷﻔرة ﻋﻠﻰ ﻣﻠف أي وﺿﻌﻧﺎھم ;)"‪b.write(new String(arg0) + "\n‬‬
‫ﺑداﺧل اﻟﺻﻧدوق‬

‫‪2‬‬
‫م‪.‬ﻣﺎﺟد اﻟﺟﻣﯾﺔ ‪mjemmjeh@hotmail.com‬‬ ‫‪2010-08-27‬‬ ‫اﺳﺗﺧدام اﻟﺗﺷﻔﯾر ﺑﺎﻟﺟﺎﻓﺎ‬
‫وھﻧﺎ طﺑﻌﺎ ﻻزم اﻗرأ اﻟﺳطر اﻟﺛﺎﻧﻲ ﻣن اﻟﻣﻠف ﻛﻲ ﻧﺷﻔره ;)(‪temp = inS.readLine‬‬

‫}‬

‫ﺳﻧﺧرج ﻣن اﻟﺣﻠﻘﺔ ﺑﻌد ﻗراءة ﻛل اﻟﺳطور ﻣﻊ ﺗﺷﻔﯾرھﺎ وﻛﺗﺎﺑﺗﮭﺎ ﻋﻠﻰ ﻣﻠف أﺧر‬

‫;)(‪b.close‬‬

‫}‬

‫وھﻛذا ﻧﻛون ﺧﻠﺻﻧﺎ ﻣن اﻟداﻟﺔ اﻟﺗﺷﻔﯾر‬

‫واﻵن ﺳﻧﺑدأ ﺑداﻟﺔ ﻓك اﻟﺗﺷﻔﯾر‬

‫وھﻧﺎ ﺑﺄن اﻟطرف اﻷﺧر ﺳوف ﯾﺳﺗﺧدم ھذه اﻟداﻟﺔ‬

‫{ ‪public static void decrypt() throws Exception‬‬

‫ھﻧﺎ اﻵﻟﯾﺔ ﻧﻔﺳﮭﺎ ‪ ،‬وﺑﺎﻟﺗﺎﻟﻲ اﻟﻐرض ﻧﺣدد ﻟﮫ ﻧوع اﻟﺧوارزﻣﯾﺔ وﻧﮭﯾﺋﮫ ﺑﺎﻟﻣﻔﺗﺎح اﻟذي ﯾﻛون ﻧﻔﺳﻧﮫ ﻣﺷﺗرك ﺑﯾن‬
‫اﻟطرﻓﯾن‬

‫;)"‪Cipher c = Cipher.getInstance("DES/ECB/PKCS5Padding‬‬

‫‪ kk‬اﻧﺗﺑﮫ ھون اﻟﻣﻔﺗﺎح ﻧﻔﺳﮫ;)‪c.init(Cipher.DECRYPT_MODE, kk‬‬

‫ﻣﻼﺣظﺔ ‪:‬ھﻧﺎ ھﯾﺋﻧﺎ اﻟﻐرض ﻟﯾﺳﺗﺧدم ﻟﻔك اﻟﺗﺷﻔﯾر‬

‫وھﻧﺎ أﺧذﻧﺎ ﻣﻘﺑض ﻋن اﻟﻣﻠف اﻟﻣﺷﻔر‬

‫(‪BufferedReader b = new BufferedReader(new FileReader‬‬

‫;))"‪"h p://localhost:8080/test/encrypted.dat‬‬

‫وھﻧﺎ أﺧذﻧﺎ ﻣﻘﺑض ﻋن اﻟﻣﻠف اﻟذي ﻧرﯾد أن ﻧﻛﺗب ﻋﻠﯾﮫ اﻟﻣﻠوﻣﺎت ﺑﻌد ﻓك اﻟﺗﺷﻔﯾر‬

‫‪BufferedWriter bb = new BufferedWriter(new‬‬


‫;))"‪FileWriter("h p://localhost:8080/test/exam.xml‬‬

‫‪3‬‬
‫م‪.‬ﻣﺎﺟد اﻟﺟﻣﯾﺔ ‪mjemmjeh@hotmail.com‬‬ ‫‪2010-08-27‬‬ ‫اﺳﺗﺧدام اﻟﺗﺷﻔﯾر ﺑﺎﻟﺟﺎﻓﺎ‬
‫وھﻧﺎ اﻵﻟﯾﺔ ﻧﻔﺳﮭﺎ ھﻲ ﻋﻣﻠﯾﺔ ﻗراءة ‪+‬ﻓك ﺗﺷﻔﯾر ‪ +‬ﻛﺗﺎﺑﺔ‬

‫;)(‪String temp = b.readLine‬‬

‫{ )‪while (temp != null‬‬

‫;)(‪byte[] cypherText = temp.getBytes‬‬

‫;)‪cypherText = c.doFinal(cypherText‬‬

‫;)‪String result = new String(cypherText‬‬

‫;)"‪bb.write(result + "\n‬‬

‫;)(‪temp = b.readLine‬‬

‫}‬

‫;)(‪b.close‬‬

‫;)(‪bb.close‬‬

‫}‬

‫ﻣﻼﺣظﺔ ‪ :‬ﯾﻣﻛن ﺗﺑﺎدل اﻟﻣﻔﺗﺎح اﻟﻣﺷﺗرك ﺑﻌدة طرق‬

‫‪ - 1‬ﻛﺗﺎﺑﺗﮫ ﻋﻠﻰ ﻣﻠف وﻣن ﺛم ﻧﻘﻠﮫ إﻟﻰ اﻟطرف اﻟﺛﺎﻧﻲ ﺑﺎﻟﯾد‬


‫‪ - 2‬ھﻧﺎك ﺧوارزﻣﯾﺎت ﺗﺗﯾﺢ ﻟﻧﺎ ﺗوﻟﯾد ﻧﻔس اﻟﻣﻔﺗﺎح ﺑﺗﻣرﯾر وﺳطﺎء ﻧﻔﺳﮭﺎ‬
‫‪ - 3‬ﺗوﻟﯾد ﻣﻔﺗﺎح ﻋن طرﯾق ﺟﮭﺎت ﻣوﺛوﻗﺔ ﻣﺛل ‪KDC‬‬

‫‪4‬‬
‫م‪.‬ﻣﺎﺟد اﻟﺟﻣﯾﺔ ‪mjemmjeh@hotmail.com‬‬ ‫‪2010-08-27‬‬ ‫اﺳﺗﺧدام اﻟﺗﺷﻔﯾر ﺑﺎﻟﺟﺎﻓﺎ‬

You might also like