الأربعاء، 16 أكتوبر 2013

قواعد التشفير بالهكس

نشر في : ليست هناك تعليقات:
بسم الله الرحمن الرحيم..
السلام عليكم ورحمة الله وبركاته
عند قيامك بالتشفير سيصادف وأن ينعطب الباتش ولا يعود إلى العمل والسبب .
عدم درياتك بنظام HexaDecimal لهذا النظام قواعد لا يمكنك خرقها .
هي قيم رياضية لا أقل ولا أكثر . مثل 1 + 1 = 2 .
لذلك يجب علينا معرفة هذه القواعد قبل القيام بأي عملية نندم عليها .
لو كانت لدينا القيمة E8A6

وكانت القيمة المكشوفة E8

على الأرجح ستقول ان طريقة التشفير سهلة

صفر حرف E .

طيب صفرناه ونعطب الباتش وش نقدر نسوي ؟

بتقولي غير E إلى قيمة قريبة مثل F أو D

< دون الاستناد إلى قاعدة

طيب غيرناها إلى D أو F وطلع مكشوف والباتش شغال

وش بتسوي برقم 8 ؟

بتقولي لقيمة قريبة 6 أو 7

وهذه الاختيارات المعقدة التي تستندون عليها دون قواعد

تحدث عطب في الباتش

لذلك طرحت لكم قواعد واضحه لعملية التشفير بالـ Hex

تابعوا معي القواعد

قاعدة الرموز
_ = ^
@ = A
. = /
$ = %
& = '
= = <
) = (
* = +
# = "
~ = .
< = =


بمعني إذا وجدت القيمة المكشوفة مثلا @ راح نضع بدالها A وتتشفر وما راح ينعطب

قاعدة الاحرف

a = '
b = c
c = b
e = d
d = e
f = g
g = f
h = i
i = h
j = k
k = j
l = m
m = l
n = o
o = n
p = q
q = p
r = s
s = r
t = u
u = t
v = w
w = v
x = y
y = x
z = {


بمعنى إذا وجدت القيمة المكشوفة مثلا l راح نضع بدالها m وتتشفر وما راح ينعطب الباتش

قاعدة الأرقام :


الأعداد الزوجية نضيف لها رقم

و

الأعداد الفردية ننقص منها رقم


مثال : لو كانت القيمة المكشوفة رقم : 8

نضيف له رقم ويصبح 9


مثال آخر : لو كانت القيمة المكشوفة رقم : 7

ننقص منه رقم ويصبح 6


((((منقووول للفائده)))

أتمنى تستندون على هذه القواعد في التشفير

دون سواها ولا تستندون على التشفير الأعمى بدون قواعد



لاتحرموني من ردودكم
أكمل القراءة Résuméabuiyad

الجمعة، 13 سبتمبر 2013

دورة تعلم الجافا من الصفر (الاساسيات حتى الاحتراف) - الجزء الثامن

نشر في : ليست هناك تعليقات:
2.11. Getting Input from Input Dialogs

جميل قوي لحد كده طيب في برنامج مساحة الدائرة كنا بندخل قيمة نصف القطر من البرنامج طيب لو حبيت اني اغير القيمة هدخل تاني للبرنامج واعدل في الكود طيب مافيه طريقة اسهل وهي اني ادخل القيمة من input dialogue وده موجود في ال JOptionPane في الميثود اللي اسمها showInputDialog .



هنكتب البرنامج عادي زي ماكتبناه قبل كده الجزء اللي هيتعدل بس هيبقي الجزء ده :



اول جملة null بتخلي الرسالة تطلع في وسط الشاشة وبعدين الجملة اللي هتخلي الuser يدخل القيمة "Enter an input" وبعد كده عنوان الdialog وبعد كده JOptionPane.QUESTION_MESSAGE علشان يعرض منظر علامة الإستفهام .




2.11.1. Converting Strings to Numbers

في برنامج زي اللي فات ده لو المفروض اني ادخل رقم هيتقري علي انه حرف مش رقم طيب الحل للمشكلة دي ايه ؟؟؟ الحل اني اخد القيمة اللي بدخلها دي واحولها لرقم يعني لو عندنا string اسمه intString وعايزة احوله لرقم int هيبقي كده :


كود PHP:
int intValue = Integer.parseInt(intString);  
ولو عايز احول متغير string ولكن فيه قيمة double هيبقي كده:

كود PHP:
double doubleValue = Double.parseDouble(doubleString);  



وبعد كده فيه برنامجين كـ case study كتطبيق علي كل اللي فات.






2.13. Getting Input from the Console


طيب دلوقتي احنا دخلنا قيمة بطريقة الJOptionPane ماشي بس انا لو عاوز اني ادخل القيم من ال command prompt هيبقي ازاي؟؟؟؟
في النسخة jdk 1.5 بتقدم لنا كلاس جديد اسمه Scanner بيحتوي علي موجموعة من الميثودس اللي بتمكني من اني استقبل من الuser اي نوع من المتغيرات وبيتعرف زي كده :

كود PHP:
System.out.print("Enter a double value: "); Scanner scanner = new Scanner(System.in); double d = scanner.nextDouble();  
ملاحظة : ميثود print هي بالظبط زي println ولكن الفرق ان println بتطبع الجملة وتسيب بعدها سطر لكن print بتطبع كله جنب بعضه .

مثال علي الستخدام كلاس Scanner :

كود PHP:
1 import java.util.Scanner; // Scanner is in java.util
 
2
 3 
public class TestScanner {
 
4   public static void main(String args[]) {
 
5     // Create a Scanner
 
6     Scanner scanner = new Scanner(System.in);
 
7
 8     
// Prompt the user to enter an integer
 
9     System.out.print("Enter an integer: "); 10     int intValue = scanner.nextInt(); 11     System.out.println("You entered the integer " + intValue); 12
13     
// Prompt the user to enter a double value 14     System.out.print("Enter a double value: "); 15     double doubleValue = scanner.nextDouble(); 16     System.out.println("You entered the double value " 17       + doubleValue); 18
19     
// Prompt the user to enter a string 20     System.out.print("Enter a string without space: "); 21     String string = scanner.next(); 22     System.out.println("You entered the string " + string); 23   } 24 }  
وشكل الخرج هيبقي كده :












2.14. Programming Style and Documentation



المفروض ان اللي بيفرق برنامج عن التاني هو الشكل يعني كله بيبرمج بس مش كله بيطلع شكل برنامجه جميل منظر الكود وهو مكتوب بنظام , حسن توزيع التعليقات كل دي حاجات بتساعد انها تخلي شكل البرنامج جميل .

وبيبدأ يقول نصايح زي مثلا توزيع التعليقات يكون بشكل انيق وبناء الكود يكون علي حسب المواصفات العالمية يعني مثلا اسماء المتغيرات تكون small ولو كلمتين تبقي اول كلمة small والتانية اول حرف فيها capital وكمان بينصحنا اننا نسيب مسافات في الأماكن المناسبة زي كده :










وكمان شكل الblocks يكون منظم ويوضح كل قوس بدايته ايه ونهايته ايه زي كده:







2.15. Programming Errors



عندنا فيه تلات انواع من الاخطاء في الكود إما syntax errors او runtime errors او logical errors

- اول نوع وهو الـ Syntax errors وده بيبقي غلط في قواعد اللغة زي كده :


كود PHP:
// ShowSyntaxErrors.java: The program contains syntax errors public class ShowSyntaxErrors {
  public static 
void main(String[] args) {
    
i = 30;
    
System.out.println(i + 4);
  }
}  
وده الغلط اللي فيه ان المتغير i اديتله قيمة من غير مااعرف نوعه كان المفروض الصح يكون كده :

كود PHP:
// ShowSyntaxErrors.java: The program contains syntax errors public class ShowSyntaxErrors {
  public static 
void main(String[] args) {
    
int i = 30;
    
System.out.println(i + 4);
  }
}  

- تاني نوع وهو runtime errors وده بيحصل بعد عملية الcompilation وبيكون نتيجة لأن فيه عملية من المستحيل تنفيذها زي مثلا القسمة علي صفر ليس لها معني زي كده :

كود PHP:
// ShowRuntimeErrors.java: Program contains runtime errors public class ShowRuntimeErrors {
  public static 
void main(String[] args) {
    
int i = 1 / 0;
  }
}  

- تالت نوع وهو الـ logical errors وفي النوع ده بتكون القواعد سليمة والعمليات سليمة ولكن البرنامج مش بينفذ المطلوب منه والخطأ ده غالبا بيكون خطأ المبرمج نفسه زي كده ده برنامج المفروض انه بيجمع رقمين :


كود PHP:
// ShowLogicErrors.java: The program contains a logic error public class ShowLogicErrors {
  public static 
void main(String[] args) {
    
// Add number1 to number2
    
int number1 = 3;
    
int number2 = 3;
    
number2 += number1 + number2;
    
System.out.println("number2 is " + number2);
  }
}  

والغلط هنا انه بعد جمع الرقمين خزن الناتج في واحد منهم يعني طير قيمة المتغير number2 . 





وبكده يكون الشابتر خلص


لينكة تحميل الشابتر كاملا



يارب الكل يستفيد منه وجعله الله في ميزان حسناتنا جميع
أكمل القراءة Résuméabuiyad

دورة تعلم الجافا من الصفر (الاساسيات حتى الاحتراف) - الجزء السابع

نشر في : ليست هناك تعليقات:
2.9. Character Data Type and Operations

في السكشن ده بنتعرف علي نوع من المتغيرات وهو الـ char وبيقولنا انه بيستخدم لتمثيل حرف واحد فقط وبتكون قيمته بين '-' ومثال عليه :

كود PHP:
char letter = 'A'; char numChar = '4';  

في المثال الأول حط الحرف A في المتغير اللي اسمه letter وفي المثال التاني حط الرقم 4 ولكن كحرف في المتغير numChar .

ملاحظة : القيمة اللي بحطها في المتغير من نوع char لازم تكون بين single quote لو حطيتها بين double quote هتبقي string وليست char يعني "A" نوعه string ولكن 'A' نوعه char .



2.9.1. Unicode and ASCII Code

في السكشن ده بيعرفنا الحرف بيتقري ازاي ولقراية وتخزين الحروف عندنا نوعين من الكود :unicode & ASCII والجافا بتدعم الunicode وبيكون كود الحروف من اول '\u0000' لحد '\uFFFF' 
وبتكون الحروف مكتوبة بالhexadecimal وده مثال علي طريقة كتابة وقراية الحروف:

يعني دلوقتي عندنا طريقتين ممكن ادخل بيهم قيمة في متغير من نوع char وهما:
كود PHP:
char letter = 'A'; char letter = '\u0041'; // Character A's Unicode is 0041  
ملاحظة : طريقة التزويد والتنقيص increment & de
crement ممكن تطبق علي الchar زيه بالظبط زي المتمغيرات العادية وده مثال هيطبع حرف الb:
كود PHP:
char ch = 'a'; System.out.println(++ch);  





2.9.2. Escape Sequences for Special Characters

احيانا وانا شغال ببقي عايز اني اطبع الناتج ولكن بعد عدد معين من السطور بإستخدام الـtab او اني اسيب سطر , الجافا بتوفر الخاصية دي عن طريق انها عملت حروف خاصة للمهام دي بتكون مسبوقة بعلامة (\) زي اللي في الجدول كده:

افرض مثلا انك عايز تطبع الجملة دي: 
He said "Java is fun"
هنعملها كده:
كود PHP:
System.out.println("He said \"Java is fun\"");  


2.9.3. Casting Between char and Numeric Types

طبعا نقدر نحول المتغير من نوع الchar لأي نوع تاني مفيش اي مشكلة يعني مثلا هنا:
كود PHP:
char c = (char)0XAB0041; // the lower 16 bits hex code 0041 is
                     // assigned to c 
System.out.println(c);   // c is character A  
ولما يكون عندنا المتغير من النوع float يعني فيه علامة عشرية بيتم تجاهل الجزء الكسر وبيتحول بس الجزء الصحيح زي كده:
كود PHP:
char c = (char)65.25;   // decimal 65 is assigned to t System.out.println(c);  // c is character A  
ونفس الحكاية لما اجي احول من char لأي نوع تاني زي كده مثلا:
كود PHP:
int i = (int)'A';       // the Unicode of character A is assigned to i System.out.println(i);  // i is 65  
ملاحظة: عند تحويل قيمة من نوع char بتتحول لرقم اوتوماتك لو كان القيم الأخري ارقام او حروف ولو موجودة مع string بتنضاف عليه زي ماهي يعني بيحصل دمج مش اكتر زي المثال ده:
كود PHP:
int i = '2' + '3'; // (int)'2' is 50 and (int)'3' is 51 System.out.println("i is " + i); int j = 2 + 'a'; // (int)'a' is 97 System.out.println("j is " + j); System.out.println(j + " is the Unicode for character " + (char)j); System.out.println("Chapter" + '2'); display
i is 101
j is 99
99 is the Unicode 
for character c
Chapter 2  


2.10. The String Type
احنا دلوقتي عرفنا متغير يقدر يشيل حرف , طيب بس انا عايز اخزن جملة بحالها اقولك يبقي هاتستخدم متغير بس من نوع string زي كده :
كود PHP:
String message = "Welcome to Java";  
ولكن الstring مش زي كل الانواع لأنه مربوط بclass زيه زي الJOptionPane يعني الstring مايعتبرش من الأنواع الجاهزة زي ال int, double يعني مايعتبرش primitive type ولكن هو يعتبر reference type معني الكلام ده هيوضح قدام اللي يهمنا دلوقتي هو ازاي اعمل متغير من نوع string وازاي احط فيه قيمة او ادمج اتنين string مع بعض ودي امثلة عليه :
كود PHP:
// Three strings are concatenated String message = "Welcome" + "to" + "Java"; // String Chapter is concatenated with number 2 String s = "Chapter" + 2; // s becomes Chapter2
// String Supplement is concatenated with character B 
String s1 = "Supplement" + 'B'; // s becomes SupplementB  

وكمان ممكن استخدم معاه كود الإختصار ده += يعني لو عندنا String فيه قيمة "Welcome to java" واسمه مثلا message لو قولت كده:
كود PHP:
message += " and Java is fun";  
هيكون الناتج كده: "Welcome to Java and Java is fun"
بيقول مثال لو عندنا i=1 و j=2 هيبقي ايه ناتج الجملة دي???
كود PHP:
System.out.println("i + j is " + i + j);  
اللي هيحصل انه هيطبع "i+j is " وبعد كده هيطبع قيمة i وبعد كده قيمة j اللي هي 12 يعني هيبقي الناتج :
كود PHP:
i + j is 12  
ولو عايز اطبع قيمة الجمع بين i و j يبقي هحطهم بين اقواس زي كده:
كود PHP:
System.out.println("i + j is " +( i + j));  

أكمل القراءة Résuméabuiyad

دورة تعلم الجافا من الصفر (الاساسيات حتى الاحتراف) - الجزء السادس

نشر في : ليست هناك تعليقات:
2.7.NUMERIC DATA TYPES AND OPERATIONS



دلوقتي احنا عرفنا متغيرات من انواع مختلفة زي int, double طيب ايه الفرق بينهم ؟؟
الفرق الأساسي هو المساحة اللي بتتحجز من الذاكرة لكل نوع يعني اول ما بعرف متغير من نوع int مثلا بيتحجز ليه في الذاكرة مساحة غير المتغير من نوع double وهكذا..
الجافا فيها 8 انواع من المتغيرات وده جدول فيه النوع والمساحة اللي بتتحجز له وممكن يتمثل في كام bit



والجافا فيها 3 انواع من المتغيرات لو عايز تعرف عدد صحيح وهما : byte, short, int & long
ولو عايز تعرف عدد عشري او له كسور فيه نوعين : float & double وبيقول ان من الأحسن استخدام الـ double لأنه ادق من الـ float .





2.7.1. NUMERIC OPERATORS



السكشن ده بيتكلم عن علامات العمليات الحسابية زي اللي في الجدول ده : 





بيقول برده معلومة ان ناتج قسمة عددين صحيحين هيطلع عدد صحيح برده وجزء الكسر هيتحذف يعني مثلا 5/2 هتطلع 2 مش 2.5 
برده علامة الـ % ودي بتجيب باقي القسمة يعني لما بنيجي نقسم رقمين بالطريقة دي اللي علي الشمال بيبقي اسمه dividend واللي علي اليمين بيبقي اسمه divisor مثلا لو قولنا 7 % 3 هتكون النتيجة 1 يعني ناتج القمسة العادية 2 وهيتبقي 1 اهو هو ده الناتج.



ولو عملنا العملية دي علي ارقام سالبة الناتج بيطلع سالب فقط لو اللي علي الشمال سالب .
طبعا حكاية الباقي دي مفيدة جدا جدا في البرمجة يعني مثلا لو بعمل برنامج بيطلع الأعداد الزوجية او الفردية ممكن اعرف الأرقام بسهولة لإن الرقم الزوجي باقي قسمته علي 2 دايما بـ0 والفردي باقي قسمته دايما بـ 1 
وجايب مثال علي الحكاية دي بيقول لو احنا انهاردة السبت وانت واصحابك هتتقابلوا كمان 10 ايام وعايز اعرف هيبقي يوم ايه ؟؟ بسهولة اقدر احدد اليوم بالمعادلة دي:


طبعا ده ماشي علي نظام الأسبوع في اوروبا يعني اول يوم في الأسبوع عندهم بيبقي يوم الإثنين الفكرة انه قال انا دلوقتي في اليوم السادس ومعادي بعد 10 ايام جميل قوي هو قام جامعهم علي بعض وجاب باقي قسمتهم علي الأسبوع كله طلع 2 يعني المعاد هيبقي في اليوم التاني من الأسبوع اللي هو يوم الثلاثاء .
وده كمان مثال برنامج بيحسب عدد الدقائق والثواني في كمية من الزمن انا بدخله.


كود:
1 import javax.swing.JOptionPane; 2 3 public class DisplayTime { 4 public static void main(String[] args) { 5 int seconds = 500; 6 int minutes = seconds / 60; 7 int remainingSeconds = seconds % 60; 8 JOptionPane.showMessageDialog(null, 9 seconds + " seconds is " + minutes + 10 " minutes and " + remainingSeconds 11 + " seconds"); 12 } 13 }



هنا في البرنامج ده قسمنا عدد الثواني الكلي علي 60 بالقسمة العادية علشان اعرف عدد الدقائق وبعدين قسمتهم بطريق الباقي علشان اعرف عدد الثواني بعد ما شيلت منهم الدقائق.
بيقولنا ملاحظة ان اي عملية بتحصل علي اعداد عشرية مش بتطلع النتيجة كاملة ولكن بتطلع مقربة ولكن في العمليات علي الأعداد الصحيحة بتطلع النتيجة كاملة بدون اي تقريب.
بعد كده هيتكلم في السكشن اللي بعده عن مفهوم القيم وازاي بتتقري وتتخزن .




2.7.3. ARITHMATIC EXPRESSIONS


ازاي نكتب تعبير كامل في برنامجنا وازاي بيتحسب ؟؟؟؟


مثال زي ده لو حولناه لكود هيبقي شكله كده :

كود:
(3 + 4 * x) / 5 – 10 * (y - 5) * (a + b + c) / x +9 * (4 / x + (9 + x) / y)




وزي ماحنا شايفين عادي زي مابقراه زي مابكتبه وعند حسابه بيطبق قواعد وهي ان اي تعبير بين اقواس بيتحسب الأول بعد كده الضرب والقسمة من الشمال لليمين وفي النهاية عمليات الجمع والطرح وبرده من الشمال لليمين.

مثال برنامج بيحول درجات الحرارة من الـفهرنهايت للسيليزويس ومعادلته هي:





كود:
Celsius =  5/9 (Fahrenheit – 32)

والبرنامج اهه :


كود:
1public class FahrenheitToCelsius 2 public static void main(String[] args) { 3 double fahrenheit = 100; // Say 100; 4 double celsius = (5.0 / 9) * (fahrenheit - 32); 5 System.out.println("Fahrenheit " + fahrenheit + " is " + 6 celsius + " in Celsius"); 7 } 8 }

وهنلاحظ في السطر الرابع اننا قولنا (5.0 / 9) علشان اجيب الناتج كقيمة عشرية مش عدد صحيح لو كان سابها (5/9) كان هيبقي الناتج 0







2.7.4. SHORTHAND OPERATORS


ممكن في الكود تقابلنا جملة زي دي :

كود:
i = i + 8;


وفيها بنجمع 8 علي قيمة المتغير i وبحط الناتج تاني في i
ممكن نختصر الجملة دي ونستخدم التعبير ده :

كود:
i += 8;


واسمه shorthand operator وفيه كمان زيه لكل العمليات زي كده:




وفيه كمان اتنين زيادة بنستخدمهم في زيادة المتغير بواحد او تنقيصه برده بقيمة واحد وقواعدها في الجدول ده :



لفرق بين وجود ++ قبل المتغير او بعده هو ان لما بتكون العلامة قبل المتغير ده معناه ان قيمته هتزيد الأول بواحد وبعدين تتم العملية المطلوبة علي القيمة الجديدة , اما لو العلامة بعد المتغير ده معناه ان العملية المطلوبة هتتم عليه الأول وبعدين قيمته هتزيد بواحد وكمثال للتوضيح:



هنا العملية تمت الاول وهي انه ضرب الـ i في 10 وبعدين زود علي الـ i واحد وهيكون الـ newNum = 100


لكن هنا زودنا الأول الـi بواحد وبعدين ضربنا القيمة الجديدة في 10 وهيكون الـ newNum = 110
بيقول نصيحة وهي عدم الإكثار من استخدام الطريقة دي في كتابة التعبيرات لأنها بتزود من صعوبة الكود.







2.8. NUMERIC TYPE CONVERSIONS



احيانا بنحتاج اننا نضم اكتر من نوع متغير في تعبير واحد زي كده:

كود:
byte i = 100; long k = i * 3 + 4; double d = i * 3.1 + k / 2;


بيقولنا قواعد عامة لمعاملة اي تعبير فيه اكتر من نوع من المتغيرات:




- لو كان فيه متغير من نوع double إذن كل المتغيرات يتحول نوعهم إلي double .

- لو مكانش بس فيه متغير من نوع float إذن كل المتغيرات يتحول نوعها إلي float

- لو مكانش بس فيه متغير من نوع long إذن كل المتغيرات يتحول نوعها إلي long

- لو مكانش يبقي المتغيرات كلها تبقي من نوع int .



يعني مثلا لو عندنا 1/2 هيبقي الناتج 0 لأن الرقمين int لكن لو كان1.0/2 هيبقي الناتج 0.5 لأن فيه رقم منهم double فهتتحول ال2 الي double وعندنا ترتيب الأنواع :







يعني بما معناه انا ممكن ادي قيمة لمتغير من نوع float واخليه int لكن العكس ماينفعش زي كده :


كود:
float f = (float)10.1; int i = (int)f;

وفي الحالة دي الجزء العشري هيتشال من القيمة.

وبيقول ملاحظة ماننساش لما اجي اعمل casting يعني لما اجي احول نوع متغير اراعي اني بحول من نوع اعلي لنوع اقل لكن العكس هيطلع error

بيقول كمان ملاحظة ان التحويل بطريقة الcasting مش بيغير نوع المتغير اللي بحوله هو بيغير قيمته بس في التعبير اللي بحول فيه .


وعامل برنامج كتطبيق علي الجزئية دي وهو برنامج بيحسب قيمة الضرائب برقمين عشريين:



كود:
 

1 public class SalesTax {
2 public static void main(String[] args) { 3 double purchaseAmount = 197.55; 4 double tax = purchaseAmount * 0.06; 5 System.out.println((int)(tax * 100) / 100.0);
6 }
7 }


وعندنا هنا المتغير اللي المفروض فيه القيمة اللي هحسبلها الضرائب هو purchaseAmount وقيمته 197.55 والمتغير tax وده بيحسب الضرائب بإنه بيضرب قيمة المبلغ في نسبة وهي 0.06 ولما جيت اطبع قيمة الضرائب المفروض تطلع بالمنظر ده 11.853 بس انا عاوز اطلع النتيجة بعد رقمين عشريين بس فاستخدم طريقة الcasting فعمل في السطر الخامس جملة casting لناتج ضرب قيمة الضرائب في 100 فطلعت 1185 قام قاسمها علي 100.0 يعني قيمة double فطلع الناتج في الأخر قيمة double وهي 11.85
أكمل القراءة Résuméabuiyad

جميع الحقوق محفوظة سيف شابسوغ ©2012-2013 | جميع المواد الواردة في هذا الموقع حقوقها محفوظة ، فهـرس الـموقــع | أتفاقية الأستخدام