تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
مقدمة الي تشفير الحروف الأبجدية العربية
#1
بسم الله الرحمن الرحيم

مقدمة:
الحروف العربية مظلومة قليلا و غاليا اي مبرمج يعاني أحيانا في التعامل مع الحروف العربية تحديدا او قد يعاني أيضا حين  يريد التعامل مع اي حروف مكتوبة بلغة أخري غير اللغة الإنجليزية و في هذا الموضوح سأحاول أن أوضح كيفية تشفير الحروف العربية فقط

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

الأمثلة التالي توضح كيفية الحصول علي الرقم المسلسل الخاص بأي حرف
مثال 1: الكود التالي يوضح مثال بسيط لكيفية الحصول علي الرقم المسلسل الخاص بحرف الياء التي تحتها نقطتان
PHP كود :
       Dim c As Char "ي"c
        Me
.Text Convert.ToInt32(c
مثال 2: أيضا الكود التالي يوضح كيفية الحصول علي الرقم المسلسل الخاص بحرف الهمزة

PHP كود :
       Dim c As Char "ء"c
        Me
.Text Convert.ToInt32(c


من الأمثلة أعلاه ستكتشف ان الرقم المسلسل بالحروف العربية يبدأ من الرقم 1569 , وينتهي بالرقم 1610
الملحوظة الهامة هنا هي أن الرقم المسلسل يبدأ دوما برقم هو الرقم 1
وفكرة التشفير في هذا الموضوع سوف تعتمد علي iهذا الرقم المسلسل الخاص بكل حرف

و الفكرة يمكن تلخيصها في الخطوات التالية
1- تحديد الحرف
2- تحويل الحرف الي رقمه المسلسل في جدول الحروف
3- التخلص من الرقم 1 الذي تبدأ به الأرقام المسلسلة
4- أخير نحصل علي رقم هو عبارة عن تشفير بسيط لهذا الحرف

الكود التالي يوضح كيفية تشفير اي حرف من حروف اللغة العربية و لقد كتبته علي هيئة دالة بحيث تمرر لها اي حرف من حروف اللغة العربية فتحصل مباشرة علي الرقم المشفر الذي يقابل هذا الحرف
PHP كود :
   Private Function EncodeCahr(As Char) As Integer
        Dim result 
As Integer 0
        result 
+= Convert.ToInt32(c)
في السطر التالي ناخذ فقط الثلاثة ارقام الأولي الموجودة علي يمين الرقم 1
        result 
result Mod 1000
        Return result
    End 
Function 
حاول عزيزي القارئ أن تستخدم الدالة مع حروف عربية فقط و لتري ما سيحدث معك

الأن لنحاول أن نعيد هذا الرقم الي حرف Char مرة أخري
و الخطوات التالية توضح ذلك
1- نقرأ الرقم المشفر
2- نقوم بتحويله الي String
3- نضيف عل يسار هذا String الرقم 1
4- نقوم بتحويل String الي رقم مرة أخري
5- أخيرا نقوم بتحويل الرقم الي Char

الكود التالي يوضح كيفية فك التشفير ولقد كتبته أيضا علي هيئة دالة بحيث تمرر لها الرقم فتحصل علي الحرف الأصلي
PHP كود :
    Private Function DecodeChar(value As Integer) As Char
        Dim c 
As String value.ToString()
 
       c c.PadLeft(c.Length 1"1"c)
 
       Return Convert.ToChar(Integer.Parse(c))
 
   End Function 

الأن عزيزي القارئ حاول أن تمرر الرقم المشفر الذي حصلت عليه من الدالة الأولي أعلاه و لتري ماذا سيحدث معك

من المؤكد ان الهدف من الموضوع هو ليس تشفير حرفا واحدا من الحروف العربية لكن الهدف هو تشفير كلمة مكتوبة باللغة العربية


الكود التالي عبارة عن دالة تمرر لها الكلمة المكتوبة بأحرف عربية فتحصل علي String هو عبارة عن تشفير لهذه الكلمة
و الفكرة تنحصر باننا نقوم بعمل Loop علي كل حرف موجود في الكلمة العربية و نحول كل حرف في الكلمة الي رقم  ثم نقوم بدمج تلك الأرقام بعد أن نضيف فراغا بينها و نحولها الي String
PHP كود :
   Private Function EncodeString(As String) As String
        Dim result 
As String ""
 
       For i 0 To s.Length 1
            Dim c 
As Char s(i)
 
           result += " "c
            result 
+= EncodeCahr(c).ToString
        Next
        Return result
.TrimStart(" "c)
 
   End Function 

عملية فك التشفير هي عملية عكسية
نأخذ String المشفر و نقوم بعمل Loop علي كل حرف ثم نتخلص من الفراغات بين الأرقام ثم نقوم بتحويل الأرقام الي حروف مرة أخري و الكود التالي يوضح شكل الدالة
PHP كود :
   Private Function DecodeString(As String) As String
        Dim result 
As String ""
 
       Dim values As String() = s.Split(" "c)
 
       For i As Integer 0 To values.Length 1
            Dim value 
As Integer Integer.Parse(values(i).ToString)
 
           Dim c As Char DecodeChar(value)
 
           result += c.ToString
        Next
        Return result
    End 
Function 

الكود التالي يوضح كيفية التشفير و فك التشفير

PHP كود :
       Dim encoded As String EncodeString("عمر")
 
       Me.Text DecodeString(encoded

أتمني ان يكون الموضوع مفيدا للبعض منكم
ان شاء الله وفي موضوعات لاحقة سأحاول أن أتخلص تماما و أقلل من الإعتماد علي دوال ميكروسوفت المستخدمة في أي كود أعلاه
الرد
تم الشكر بواسطة: sendbad100 , tryold , ابو ليلى , Anas Mahmoud
#2
ممكن طلب

رسم سهم

هذا كود رسم lad
Imports System

Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs)
MyBase.OnPaint(e)
e.Graphics.SmoothingMode = SmoothingMode.AntiAlias
Dim g As Graphics = e.Graphics
Dim pointF As New PointF(CSng(Me.Width) / 2F, CSng(Me.Height) / 2F)
Dim num1 As Single = Math.Min(pointF.X, pointF.Y)
Dim num2 As Single = CSng(CDbl(num1) * 65.0 / 100.0)
Dim num3 As Single = CSng(CDbl(num1) * 55.0 / 100.0)
Dim num4 As Single = CSng(CDbl(num1) * 45.0 / 100.0)
Dim _Brush As Brush = CType(New LinearGradientBrush(New Point(CInt(Math.Truncate(CDbl(pointF.X) - CDbl(num2))), CInt(Math.Truncate(CDbl(pointF.Y) - CDbl(num2)))), New Point(CInt(Math.Truncate(CDbl(pointF.X) + CDbl(num2))), CInt(Math.Truncate(CDbl(pointF.Y) + CDbl(num2)))), Color.WhiteSmoke, SystemColors.ControlDarkDark), Brush)
g.FillEllipse(_Brush, pointF.X - num2, pointF.Y - num2, 2F * num2, 2F * num2)
_Brush.Dispose()
If Me._Value Then
Dim path As New GraphicsPath()
path.AddEllipse(pointF.X - num1, pointF.Y - num1, num1 * 2F, num1 * 2F)
Dim pathGradientBrush As New PathGradientBrush(path)
pathGradientBrush.CenterColor = Color.FromArgb(150, CInt(Math.Truncate(Me.OnColor.R)), CInt(Math.Truncate(Me.OnColor.G)), CInt(Math.Truncate(Me.OnColor.B)))
Dim colorArray() As Color = { Color.FromArgb(1, CInt(Math.Truncate(Me.OnColor.R)), CInt(Math.Truncate(Me.OnColor.G)), CInt(Math.Truncate(Me.OnColor.B))) }
pathGradientBrush.SurroundColors = colorArray
g.FillEllipse(CType(pathGradientBrush, Brush), pointF.X - num1, pointF.Y - num1, num1 * 2F, num1 * 2F)
path.Dispose()
pathGradientBrush.Dispose()
End If
Dim brush2 As Brush = CType(New LinearGradientBrush(New Point(CInt(Math.Truncate(CDbl(pointF.X) - CDbl(num3))), CInt(Math.Truncate(CDbl(pointF.Y) - CDbl(num3)))), New Point(CInt(Math.Truncate(CDbl(pointF.X) + CDbl(num3))), CInt(Math.Truncate(CDbl(pointF.Y) + CDbl(num2)))), SystemColors.ControlDarkDark, Color.WhiteSmoke), Brush)
g.FillEllipse(brush2, pointF.X - num3, pointF.Y - num3, 2F * num3, 2F * num3)
_Brush.Dispose()
Dim gp As New GraphicsPath()
gp.AddEllipse(pointF.X - num4, pointF.Y - num4, 2F * num4, 2F * num4)
If Me._Value Then
Dim pathGradientBrush As New PathGradientBrush(gp)
pathGradientBrush.CenterColor = Color.WhiteSmoke
Dim colorArray() As Color = { Me.OnColor }
pathGradientBrush.SurroundColors = colorArray
pathGradientBrush.CenterPoint = New PointF(pointF.X - num4 / 2F, pointF.Y - num4 / 2F)
g.FillEllipse(CType(pathGradientBrush, Brush), pointF.X - num4, pointF.Y - num4, 2F * num4, 2F * num4)
pathGradientBrush.Dispose()
Else
Dim pathGradientBrush As New PathGradientBrush(gp)
pathGradientBrush.CenterColor = Color.WhiteSmoke
Dim colorArray() As Color = { Me.OffColor }
pathGradientBrush.SurroundColors = colorArray
pathGradientBrush.CenterPoint = New PointF(pointF.X - num4 / 2F, pointF.Y - num4 / 2F)
g.FillEllipse(CType(pathGradientBrush, Brush), pointF.X - num4, pointF.Y - num4, 2F * num4, 2F * num4)
pathGradientBrush.Dispose()
End If
gp.Dispose()
End Sub

اريد رسم سهم بهذا الشكل
الرد
تم الشكر بواسطة:
#3
PHP كود :
Imports System

Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs)
MyBase.OnPaint(e)
e.Graphics.SmoothingMode SmoothingMode.AntiAlias
Dim g 
As Graphics e.Graphics
Dim pointF 
As New PointF(CSng(Me.Width) / 2FCSng(Me.Height) / 2F)
Dim num1 As Single Math.Min(pointF.XpointF.Y)
Dim num2 As Single CSng(CDbl(num1) * 65.0 100.0)
Dim num3 As Single CSng(CDbl(num1) * 55.0 100.0)
Dim num4 As Single CSng(CDbl(num1) * 45.0 100.0)
Dim _Brush As Brush CType(New LinearGradientBrush(New Point(CInt(Math.Truncate(CDbl(pointF.X) - CDbl(num2))), CInt(Math.Truncate(CDbl(pointF.Y) - CDbl(num2)))), New Point(CInt(Math.Truncate(CDbl(pointF.X) + CDbl(num2))), CInt(Math.Truncate(CDbl(pointF.Y) + CDbl(num2)))), Color.WhiteSmokeSystemColors.ControlDarkDark), Brush)
g.FillEllipse(_BrushpointF.num2pointF.num22F num22F num2)
_Brush.Dispose()
If 
Me._Value Then
Dim path 
As New GraphicsPath()
path.AddEllipse(pointF.num1pointF.num1num1 2Fnum1 2F)
Dim pathGradientBrush As New PathGradientBrush(path)
pathGradientBrush.CenterColor Color.FromArgb(150CInt(Math.Truncate(Me.OnColor.R)), CInt(Math.Truncate(Me.OnColor.G)), CInt(Math.Truncate(Me.OnColor.B)))
Dim colorArray() As Color = { Color.FromArgb(1CInt(Math.Truncate(Me.OnColor.R)), CInt(Math.Truncate(Me.OnColor.G)), CInt(Math.Truncate(Me.OnColor.B))) }
pathGradientBrush.SurroundColors colorArray
g
.FillEllipse(CType(pathGradientBrushBrush), pointF.num1pointF.num1num1 2Fnum1 2F)
path.Dispose()
pathGradientBrush.Dispose()
End If
Dim brush2 As Brush CType(New LinearGradientBrush(New Point(CInt(Math.Truncate(CDbl(pointF.X) - CDbl(num3))), CInt(Math.Truncate(CDbl(pointF.Y) - CDbl(num3)))), New Point(CInt(Math.Truncate(CDbl(pointF.X) + CDbl(num3))), CInt(Math.Truncate(CDbl(pointF.Y) + CDbl(num2)))), SystemColors.ControlDarkDarkColor.WhiteSmoke), Brush)
g.FillEllipse(brush2pointF.num3pointF.num32F num32F num3)
_Brush.Dispose()
Dim gp As New GraphicsPath()
gp.AddEllipse(pointF.num4pointF.num42F num42F num4)
If 
Me._Value Then
Dim pathGradientBrush 
As New PathGradientBrush(gp)
pathGradientBrush.CenterColor Color.WhiteSmoke
Dim colorArray
() As Color = { Me.OnColor }
pathGradientBrush.SurroundColors colorArray
pathGradientBrush
.CenterPoint = New PointF(pointF.num4 2FpointF.num4 2F)
g.FillEllipse(CType(pathGradientBrushBrush), pointF.num4pointF.num42F num42F num4)
pathGradientBrush.Dispose()
Else
Dim pathGradientBrush As New PathGradientBrush(gp)
pathGradientBrush.CenterColor Color.WhiteSmoke
Dim colorArray
() As Color = { Me.OffColor }
pathGradientBrush.SurroundColors colorArray
pathGradientBrush
.CenterPoint = New PointF(pointF.num4 2FpointF.num4 2F)
g.FillEllipse(CType(pathGradientBrushBrush), pointF.num4pointF.num42F num42F num4)
pathGradientBrush.Dispose()
End If
gp.Dispose()
End Sub 
الرد
تم الشكر بواسطة:


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  التعامل مع الصور Images في بيئة الدوت نت باستخدام +GDI - مقدمة RaggiTech 3 3,713 30-07-21, 05:14 PM
آخر رد: kebboud
  ترجمة النصوص من الإنجليزية الي العربية بين الواقع و الخيال silverlight 2 3,763 28-05-20, 05:05 AM
آخر رد: محمد ايمن
  [VB.NET] عمل برنامج تشفير بخوارزمية base64 alking-0999 2 4,242 31-01-19, 07:28 PM
آخر رد: khalil7547
  [مقال] تشفير الكونكشن استرنج mero5000 7 2,402 04-12-18, 12:14 PM
آخر رد: dametucorazon
  تشفير الملفات التنفيذية silverlight 2 4,432 02-10-18, 08:57 AM
آخر رد: sendbad100
  مقدمة إلي ضغط الصور ..... Zip Bitmap silverlight 0 1,388 10-05-18, 04:35 AM
آخر رد: silverlight
  مقدمة إلي إخفاء المعلومات - الجزء الأول silverlight 5 2,560 07-01-17, 10:44 PM
آخر رد: Basil Abdallah
  مقدمة إلي إخفاء المعلومات - الجزء الثاني silverlight 1 1,917 06-01-17, 11:52 AM
آخر رد: silverlight
  مقارنة الكلمات و الأسماء العربية برمجيا silverlight 4 2,638 20-12-15, 08:34 PM
آخر رد: silverlight
  [VB.NET] برنامج تشفير خوارزمية rsa مضغوط ببرنامج winrar alking-0999 2 3,381 08-07-15, 01:49 PM
آخر رد: alking-0999

التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم