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

‫ﻣﻘدﻣﺔ ‪:‬‬
‫ﻓﻲ ﺑﺎدئ اﻷﻣر ﺣﺗﻰ ﻧﺗﻣﻛن ﻣن ﺗﺷﻔر أي ﻣﻠف وأرﺳﻠﮫ ﻟﻠطرف اﻟﺛﺎﻧﻲ ﻻزم ﯾﻛون ﻋﻧدي ﻣﻔﺗﺎح وھذا اﻟﻣﻔﺗﺎح ﻻزم‬
‫ﯾﻛون ﻓﺳﮫ ﻋﻧد اﻟطرف اﻟﺛﺎﻧﻲ‬
‫ﯾﻌﻧﻲ ﺗﺧﯾل ﻣﻌﻲ اﻧﮫ ﯾوﺟد ﺻﻧدوق ووﺿﻌت ﻓﯾﮫ ﻣﻌﻠوﻣﺎت وﻗﻔﻠﺗﮫ ﻛﻲ ﻻ ﯾﺗﻣﻛن أﺣد ﻣن اﻟوﺻول إﻟﻰ ﺗﻠك اﻟﻣﻌﻠوﻣﺎت‬
‫واﻵن اﻟطرف اﻟﺛﺎﻧﻲ ﻣن اﻟﻣﻔﺗرض ﯾﻛون ﻋﻧده ﻧﻔس اﻟﻣﻔﺗﺎح ﺣﺗﻰ ﯾﺗﻣﻛن ﻣن ﻓﺗﺢ اﻟﺻﻧدوق وأﺧذ اﻟﻣﻌﻠوﻣﺎت ﻣﻧﮫ‬

‫ﻓﺄول ﺧطوة ھﻲ ﺗوﻟﯾد اﻟﻣﻔﺗﺎح‬
‫ﺗﻣﻛﻧﻧﺎ ﺟﺎﻓﺎ ﺑﺄن ﺗﻌطﯾﻧﺎ ﺻف ﺟﺎھز ﻟﻼﺳﺗﺧدام وھو ‪ KeyGenerator‬ﺣﯾث ﯾﻘوم ﺑﺈﻧﺷﺎء ﻣﻔﺗﺎح ﺣﺳب ﺧوارزﻣﯾﺔ‬
‫اﻟﺗﺷﻔﯾر اﻟﻣﻣررة ﺑﺎﻟوﺳﯾط‬
‫ﺳﻧﺑﻧﻲ ﺻف اﺳﻣﮫ ‪SecurityClass‬‬
‫وﺿﻣن ﺑﺎﻧﯾﮫ ﺳﻧﻛﺗب ﻣﺎ ﯾﻠﻲ‬
‫{ )(‪public SecurityClass‬‬
‫{ ‪try‬‬
‫ھﻧﺎ طﻠﺑﻧﺎ ﻣﻔﺗﺎح ھذا اﻟﻣﻔﺗﺎح ﻟﻧﺳﺗﺧدم ﺧوارزﻣﯾﺔ اﻟـ;)"‪k = KeyGenerator.getInstance("DES‬‬
‫‪DES‬‬
‫‪ KK‬ھﻧﺎ أﻧﺷﺄﻧﺎ اﻟﻣﻔﺗﺎح وأﺻﺑﺢ ھو;)(‪kk = k.generateKey‬‬
‫{ )‪} catch (NoSuchAlgorithmException ex‬‬
‫}‬
‫}‬
‫ﻣﻼﺣظﺔ ‪ :‬إن ﺧوارزﻣﯾﺔ اﻟﺗﺷﻔﯾر ھﻲ اﻟﻣﺳؤوﻟﺔ ﻋن ﺗوﻟﯾد ﻣﻔﺗﺎح ﯾﻛون ﻣﻌﻘد وﻻ ﯾﺳﺗطﯾﻊ أﺣد أن ﯾوﻟد ﻧﻔس اﻟﻣﻔﺗﺎح‬
‫ﻷﻧﮭﺎ ﺗﺗﺑﻊ ﻋﻣﻠﯾﺎت ﻣﻌﻘدة ﻓﻲ ﻋﻣﻠﯾﺔ ﺗوﻟﯾد اﻟﻣﻔﺗﺎح ‪ ،‬ﻣن اﻟﺧوارزﻣﯾﺎت اﻟﻣﺳﺗﺧدﻣﺔ ﺧوارزﻣﯾﺔ اﻟﺟﻣل وﺧوارزﻣﯾﺔ‬
‫‪ DES‬وھﻧﺎك ﺧوارزﻣﯾﺎت أﺧرى‬

‫‪1‬‬
‫اﺳﺗﺧدام اﻟﺗﺷﻔﯾر ﺑﺎﻟﺟﺎﻓﺎ‬

‫‪2010-08-27‬‬

‫م‪.‬ﻣﺎﺟد اﻟﺟﻣﯾﺔ ‪mjemmjeh@hotmail.com‬‬

‫واﻵن ﺳﻧﻛﺗب اﻟﺗﺎﺑﻊ اﻟذي ﯾﻘوم ﺑﻌﻣﻠﯾﺔ اﻟﺗﺷﻔﯾر‬
‫{ ‪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‬‬
‫اﺳﺗﺧدام اﻟﺗﺷﻔﯾر ﺑﺎﻟﺟﺎﻓﺎ‬

‫‪2010-08-27‬‬

‫م‪.‬ﻣﺎﺟد اﻟﺟﻣﯾﺔ ‪mjemmjeh@hotmail.com‬‬

‫وھﻧﺎ طﺑﻌﺎ ﻻزم اﻗرأ اﻟﺳطر اﻟﺛﺎﻧﻲ ﻣن اﻟﻣﻠف ﻛﻲ ﻧﺷﻔره ;)(‪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‬‬
‫اﺳﺗﺧدام اﻟﺗﺷﻔﯾر ﺑﺎﻟﺟﺎﻓﺎ‬

‫‪2010-08-27‬‬

‫م‪.‬ﻣﺎﺟد اﻟﺟﻣﯾﺔ ‪mjemmjeh@hotmail.com‬‬

‫وھﻧﺎ اﻵﻟﯾﺔ ﻧﻔﺳﮭﺎ ھﻲ ﻋﻣﻠﯾﺔ ﻗراءة ‪+‬ﻓك ﺗﺷﻔﯾر ‪ +‬ﻛﺗﺎﺑﺔ‬

‫;)(‪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‬‬
‫اﺳﺗﺧدام اﻟﺗﺷﻔﯾر ﺑﺎﻟﺟﺎﻓﺎ‬

‫‪2010-08-27‬‬

‫م‪.‬ﻣﺎﺟد اﻟﺟﻣﯾﺔ ‪mjemmjeh@hotmail.com‬‬

Sign up to vote on this title
UsefulNot useful