صفحة 1 من 2 12 الأخيرةالأخيرة
النتائج 1 إلى 10 من 14
الموضوع:

برمجة شفرة الـ Columnar Transposition Cipher ( احد طرق التشفير الانتقالي )

الزوار من محركات البحث: 1036 المشاهدات : 3754 الردود: 13
الموضوع حصري
جميع روابطنا، مشاركاتنا، صورنا متاحة للزوار دون الحاجة إلى التسجيل ، الابلاغ عن انتهاك - Report a violation
  1. #1
    Software Developer
    Expert in Encryption
    تاريخ التسجيل: January-2010
    الدولة: البـــــصرة
    الجنس: ذكر
    المشاركات: 7,348 المواضيع: 422
    صوتيات: 7 سوالف عراقية: 0
    التقييم: 6778
    مزاجي: ****
    المهنة: مبرمج شركة Weir
    أكلتي المفضلة: ****
    موبايلي: ****
    آخر نشاط: 14/November/2022
    مقالات المدونة: 163

    برمجة شفرة الـ Columnar Transposition Cipher ( احد طرق التشفير الانتقالي )

    شفرة الـ Columnar Transposition Cipher





    وهي احد شفرات التشفير الانتقالي , وتعتبر هذا الشفرة حالة خاصة من شفرة الروت سايفر Route Cipher , ولكن هذا الطريقة تحتاج الى كلمة مفتاحية على عكس شفرة الروت .

    التشفير Encrytion :
    1- نقوم بعمل جدول عدد اعمدته بعدد احرف الكلمة المفتاحية , ونضع الكلمة المفتاحية بالسطر الاول .
    2- نقوم بوضع تسلسل الاحرف بالاعتماد على الابجدية في السطر الثاني .
    3- نضع العبارة المراد تشفيرها في باقي خلايا الجدول وحسب الترتيب الابجدي للحرف الموجود في المفتاح .
    4- عدد الاسطر ينتج من قسمة عدد احرف النص المراد تشفيره على عدد احرف الكلمة المفتاحية . (دائما يقرب للعدد الاعلى )
    5- وضع الحرف (X) مكان الخلايا الفارغة بعد وضع النص المراد تشفيره . ( مو شرط هذه الخطوة )
    مثال : شفّر العبارة التالية ( attack at dawn ) اذا علمت ان الكلمة المفتاحية هي : spyman



    و تقرأ الاعمدة حسب الترتيب بالمفتاح بالسطر الثاني .. فيكون الناتج : CWAAKNTTAATD

    مثال : شفّر النص التالي ( attack at dawn ) اذا علمت ان الكلمة المفتاحية هي : glass


    فيكون النص المشفر : TTXAKWTANADXCAX​


    فك التشفير Decrytion :
    طريقة فك التشفير نفس التشفير تماماً .. نرتب جدول بنفس الطريقة ونضع احرف المفتاح ونرقم السطر الثاني كما بطريقة فك التشفير .
    مثال : قم بفك تشفير النص التالي : TTXAKWTANADXCAX اذا علمت ان الكلمة المفتاحية : glass



    يقرأ النص سطر سطر .. فيكون الناتج : attackatdawnxxx


    برمجة شفرة الـ Columnar Transposition بلغة VB6 :
    هناك Modules وضعته بداخل البرنامج خاص بالتشفير الكلاسيكي التقليدي :

    1- ضع ثلاث صناديق نصوص و زر امر واحد .
    2- انشئ اثنين من الموديل Modules واضف الكود في الموديل الاول الكود ادناه :

    الموديل الاول ( modCrypto )

    كود PHP:
    Option Explicit
    Public UndoTemp         As String
    Private numConv(10)     As Byte
    Private Plain           As Variant
    Private Code(28)        As String
    Private Square(36)      As String
    Private SquareCode(5)   As String
    Private Row()           As Integer
    Private PlaySquare      As String

    '----------------------------------------------------------------
    '
    '                       Ceasar Shift
    '
    '----------------------------------------------------------------

    Public Function EncodeCeasar(ByVal PlainIn As String, ByVal key As String) As String
    '
    encode with Single Columnar
    Dim i 
    As Long
    Dim plainC 
    As Integer
    Dim codeC 
    As Integer
    Dim shiftC 
    As Integer

    'check key and text lenght
    If Len(key) <> 1 Then
        MsgBox "The Shift Key must be one letter, representing the begin of the shifted row.", vbCritical
        Exit Function
        End If

    '
    trim all but alphabet
    PlainIn 
    TrimText(PlainInTrueFalseFalseFalse)
    If 
    PlainIn "" Then Exit Function

    shiftC Asc(key) - 65

    'encode
    For i = 1 To Len(PlainIn)
        plainC = Asc(Mid(PlainIn, i, 1)) - 64
        codeC = plainC + shiftC
        If codeC > 26 Then codeC = codeC - 26
        EncodeCeasar = EncodeCeasar & Chr(codeC + 64)
    Next i

    End Function


    Public Function DecodeCeasar(ByVal CodeIn As String, ByVal key As String) As String
    '
    decode with Single Columnar
    Dim i 
    As Long
    Dim plainC 
    As Integer
    Dim codeC 
    As Integer
    Dim shiftC 
    As Integer

    'check key and text lenght
    If Len(key) <> 1 Then
        MsgBox "The Shift Key must be one letter, representing the begin of the shifted row.", vbCritical
        Exit Function
        End If

    '
    trim all but alphabet
    CodeIn 
    TrimText(CodeInTrueFalseFalseFalse)
    If 
    CodeIn "" Then Exit Function

    shiftC Asc(key) - 65

    'decode
    For i = 1 To Len(CodeIn)
        codeC = Asc(Mid(CodeIn, i, 1)) - 64
        plainC = codeC - shiftC
        If plainC < 1 Then plainC = plainC + 26
        DecodeCeasar = DecodeCeasar & Chr(plainC + 64)
    Next i

    End Function

    '
    ----------------------------------------------------------------
    '
    '          
    Single and Double Columnar Transposition
    '
    '
    ----------------------------------------------------------------

    Public Function 
    EncodeColumnar(ByVal PlainIn As StringByVal key As String) As String
    'encode with Single Columnar

    '
    trim all but alphabet
    PlainIn 
    TrimText(PlainInTrueFalseFalseFalse)
    If 
    PlainIn "" Then Exit Function

    'initialize columnar key
    key = TrimText(key, True, False, False, False)
    If InitColumnar(key) <> 0 Then Exit Function

    '
    encode
    EncodeColumnar 
    EncColumn(PlainIn)

    End Function


    Public Function 
    DecodeColumnar(ByVal CodeIn As StringByVal key As String) As String
    'decode with Single Columnar

    CodeIn = TrimText(CodeIn, True, False, False, False)
    If CodeIn = "" Then Exit Function

    '
    initialize columnar key
    key 
    TrimText(keyTrueFalseFalseFalse)
    If 
    InitColumnar(key) <> 0 Then Exit Function

    'decode
    DecodeColumnar = DecColumn(CodeIn)

    End Function


    Public Function EncodeDoubleColumnar(ByVal PlainIn As String, ByVal keyCol1 As String, ByVal keyCol2 As String) As String
    '
    encode with Double Columnar

    'trim all but alphabet
    PlainIn = TrimText(PlainIn, True, False, False, False)
    If PlainIn = "" Then Exit Function

    '
    initialize 1st columnar key
    keyCol1 
    TrimText(keyCol1TrueFalseFalseFalse)
    If 
    InitColumnar(keyCol1) <> 0 Then Exit Function

    'encode
    EncodeDoubleColumnar = EncColumn(PlainIn)

    '
    initialize 2nd columnar key
    keyCol2 
    TrimText(keyCol2TrueFalseFalseFalse)
    If 
    InitColumnar(keyCol2) <> 0 Then Exit Function

    'encode
    EncodeDoubleColumnar = EncColumn(EncodeDoubleColumnar)

    End Function


    Public Function DecodeDoubleColumnar(ByVal CodeIn As String, ByVal keyCol1 As String, ByVal keyCol2 As String) As String
    '
    encode with Double Columnar

    'trim all but alphabet
    CodeIn = TrimText(CodeIn, True, False, False, False)
    If CodeIn = "" Then Exit Function

    '
    initialize 2nd columnar key
    keyCol2 
    TrimText(keyCol2TrueFalseFalseFalse)
    If 
    InitColumnar(keyCol2) <> 0 Then Exit Function

    'decode
    DecodeDoubleColumnar = DecColumn(CodeIn)

    '
    initialize 1st columnar key
    keyCol1 
    TrimText(keyCol1TrueFalseFalseFalse)
    If 
    InitColumnar(keyCol1) <> 0 Then Exit Function

    'decode
    DecodeDoubleColumnar = DecColumn(DecodeDoubleColumnar)

    End Function


    Public Function InitColumnar(ByVal key As String) As Integer
    '
    initialize the columnar key

    Dim i 
    As Long
    Dim j 
    As Long
    Dim PWL 
    As Integer
    Dim smallestChar 
    As Byte
    Dim currentChar 
    As Byte

    'check Key
    PWL = Len(key)
    If PWL < 5 Then
        MsgBox "The Columnar Key is too short.", vbCritical
        InitColumnar = 1
        Exit Function
        End If

    '
    Get Key column order and put in in row()
    ReDim Row(PWL) As Integer
    For 1 To PWL
        smallestChar 
    255
        
    For 1 To PWL
            currentChar 
    Asc(UCase(Mid(keyj1)))
            If 
    currentChar smallestChar Then
                smallestChar 
    currentChar
                Row
    (i) = j

            End 
    If
        
    Next
        Mid
    (keyRow(i), 1) = Chr(255)
    Next

    End 
    Function


    Public Function 
    EncColumn(ByVal PlainIn As String) As String
    'encode text columnar

    Dim i As Long
    Dim j As Long

    '
    readoff row by row and place one by one
    For 1 To UBound(Row)
        For 
    Row(iTo Len(PlainInStep UBound(Row)
            
    EncColumn EncColumn Mid(PlainInj1)
        
    Next
    Next

    End 
    Function


    Public Function 
    DecColumn(ByVal CodeIn As String) As String
    'decode text columnar

    Dim i As Long
    Dim j As Long
    Dim CodeCount As Long

    '
    readoff one by one and place row by row
    DecColumn 
    Space(Len(CodeIn))
    CodeCount 1
    For 1 To UBound(Row)
        For 
    Row(iTo Len(CodeInStep UBound(Row)
            
    Mid(DecColumnj1) = Mid(CodeInCodeCount1)
            
    CodeCount CodeCount 1
        Next
    Next

    End 
    Function

    '----------------------------------------------------------------
    '
    '              Straddling Checkerboard Subs
    '
    '----------------------------------------------------------------

    Public Function EncodeCheckerBoard(ByVal PlainIn As String, ByVal key As String) As String
    '
    encode with checkerboard

    PlainIn 
    TrimText(PlainInTrueFalseTrueTrue)
    If 
    PlainIn "" Then Exit Function

    'initialize CheckerBoard key
    key = TrimText(key, True, False, False, False)
    If InitCheckerboard(key) <> 0 Then Exit Function

    '
    encode
    EncodeCheckerBoard 
    EncChecker(PlainIn)

    End Function


    Public Function 
    DecodeCheckerBoard(ByVal CodeIn As StringByVal key As String) As String
    'decode with checkerboard

    '
    trim all but alphabet
    CodeIn 
    TrimText(CodeInFalseTrueFalseFalse)
    If 
    CodeIn "" Then Exit Function

    'initialize CheckerBoard key
    key = TrimText(key, True, False, False, False)
    If InitCheckerboard(key) <> 0 Then Exit Function

    '
    decode
    DecodeCheckerBoard 
    DecChecker(CodeIn)

    End Function


    Private Function 
    InitCheckerboard(ByVal key As String) As Integer
    'initialize checkerboard key

    Dim i As Long
    Dim j As Long
    Dim smallestChar As Byte
    Dim currentChar As Byte
    Dim smallestPointer As Integer
    Dim LO As Byte
    Dim HI As Byte
    Dim Row(10) As Integer

    '
    check key and text lenght
    If Len(key) < 10 Then
        MsgBox 
    "The Checkerboard Key must be at least 10 characters."vbCritical
        InitCheckerboard 
    1
        
    Exit Function
        
    End If
        
    ' assign codes to standard numbered checkerboard
    Plain = Array("", "1", "31", "32", "33", "6", "34", "35", _
            "36", "9", "37", "38", "39", "30", "5", "4", "71", _
            "72", "0", "8", "2", "73", "74", "75", "76", "77", _
            "78", "79", "70")

    '
    Get Key column order
    For 1 To 10
        smallestChar 
    255
        
    For 1 To 10
            currentChar 
    Asc(UCase(Mid(keyj1)))
            If 
    currentChar smallestChar Then
                smallestChar 
    currentChar
                smallestPointer 
    j
            End 
    If
        
    Next
        numConv
    (smallestPointer Mod 10) = i Mod 10
        Mid
    (keysmallestPointer1) = Chr(255)
    Next

    'setup re-ordered checkerboard numbers
    For i = 1 To 28
        If Len(Plain(i)) = 1 Then
            LO = Val(Plain(i))
            Code(i) = Trim(Str(numConv(LO)))
            Else
            LO = Val(Right(Plain(i), 1))
            HI = Val(Left(Plain(i), 1))
            Code(i) = Trim(Str(numConv(HI))) & Trim(Str(numConv(LO)))
            End If
    Next i

    End Function


    Public Function EncChecker(ByVal PlainIn As String) As String
    '
    encode text checkerboard
    Dim i 
    As Long

    For 1 To Len(PlainIn)
        
    EncChecker EncChecker GetCode(Mid(PlainIni1))
    Next i

    End 
    Function

    Public Function 
    DecChecker(ByVal CodeIn As String) As String
    'decode text checkerboard
    Dim i As Long
    Dim Pchar As String

    For i = 1 To Len(CodeIn)
        Pchar = GetPlain(Mid(CodeIn, i, 1))
        If Pchar = "" Then
            Pchar = GetPlain(Mid(CodeIn, i, 2))
            i = i + 1
        End If
        DecChecker = DecChecker & Pchar
    Next

    End Function


    Private Function GetCode(PlainChar As String) As String
    '
    find number that matches to character

    Dim X 
    As Byte
    Asc(UCase(PlainChar))
    If 
    Asc("."Then
        GetCode 
    Code(27' point
    ElseIf X = Asc(" ") Then
        GetCode = Code(28) ' 
    space
    ElseIf 64 And 91 Then
        GetCode 
    Code(64' letter
    Else
        GetCode = "" ' 
    not found
    End 
    If

    End Function


    Private Function 
    GetPlain(CodeChar As String) As String
    'find character that matches to number

    Dim i As Integer

    For i = 1 To 28
        If CodeChar = Code(i) Then
            '
    match found
            
    If 27 Then
                GetPlain 
    "." ' point
            ElseIf i = 28 Then
                GetPlain = " " ' 
    space
            
    Else
                
    GetPlain Chr(64' letter
            End If
        Exit Function
        End If
    Next

    GetPlain = ""

    End Function


    Public Function EncodeCheckAndColumnar(ByVal PlainIn As String, ByVal KeySCB As String, ByVal keyCol1 As String, ByVal keyCol2 As String) As String
    '
    Encode CheckerBoard with Double Columnar

    PlainIn 
    TrimText(PlainInTrueFalseTrueTrue)
    If 
    PlainIn "" Then Exit Function

    'initialize checkerboard key
    KeySCB = TrimText(KeySCB, True, False, False, False)
    If InitCheckerboard(KeySCB) <> 0 Then Exit Function

    '
    encode
    EncodeCheckAndColumnar 
    EncChecker(PlainIn)
    If 
    EncodeCheckAndColumnar "" Then Exit Function

    'initialize 1st columnar key
    keyCol1 = TrimText(keyCol1, True, False, False, False)
    If InitColumnar(keyCol1) <> 0 Then Exit Function

    '
    encode
    EncodeCheckAndColumnar 
    EncColumn(EncodeCheckAndColumnar)
    If 
    EncodeCheckAndColumnar "" Then Exit Function

    'initialize 2nd columnar key
    keyCol2 = TrimText(keyCol2, True, False, False, False)
    If InitColumnar(keyCol2) <> 0 Then Exit Function

    '
    encode
    EncodeCheckAndColumnar 
    EncColumn(EncodeCheckAndColumnar)

    End Function


    Public Function 
    DecodeCheckAndColumnar(ByVal CodeIn As StringByVal KeySCB As StringByVal keyCol1 As StringByVal keyCol2 As String) As String
    'decode CheckerBoard with Double Columnar

    '
    trim all but alphabet
    CodeIn 
    TrimText(CodeInFalseTrueFalseFalse)
    If 
    CodeIn "" Then Exit Function

    'initialize 2nd columnar key
    keyCol2 = TrimText(keyCol2, True, False, False, False)
    If InitColumnar(keyCol2) <> 0 Then Exit Function

    '
    decode
    DecodeCheckAndColumnar 
    DecColumn(CodeIn)
    If 
    DecodeCheckAndColumnar "" Then Exit Function

    'initialize 1st columnar key
    keyCol1 = TrimText(keyCol1, True, False, False, False)
    If InitColumnar(keyCol1) <> 0 Then Exit Function

    '
    decode
    DecodeCheckAndColumnar 
    DecColumn(DecodeCheckAndColumnar)

    'initialize checkerboard key
    KeySCB = TrimText(KeySCB, True, False, False, False)
    If InitCheckerboard(KeySCB) <> 0 Then Exit Function

    '
    decode
    DecodeCheckAndColumnar 
    DecChecker(DecodeCheckAndColumnar)

    End Function


    '----------------------------------------------------------------
    '
    '                           ADFGVX Subs
    '
    '----------------------------------------------------------------

    Public Function EncodeADFGVX(ByVal PlainIn As String, ByVal KeySquare As String, ByVal KeyCol As String) As String
    '
    Encode with ADFGVX

    PlainIn 
    TrimText(PlainInTrueTrueFalseFalse)
    If 
    PlainIn "" Then Exit Function

    'initialize Square key
    KeySquare = TrimText(KeySquare, True, False, False, False)
    If InitSquare(KeySquare) <> 0 Then Exit Function

    '
    encode
    EncodeADFGVX 
    EncSquare(PlainIn)
    If 
    EncodeADFGVX "" Then Exit Function

    'initialize columnar key
    KeyCol = TrimText(KeyCol, True, False, False, False)
    If InitColumnar(KeyCol) <> 0 Then Exit Function

    '
    encode
    EncodeADFGVX 
    EncColumn(EncodeADFGVX)

    End Function


    Public Function 
    DecodeADFGVX(ByVal CodeIn As StringByVal KeySquare As StringByVal KeyCol As String) As String
    'Decode with ADFGVX

    '
    trim all but alphabet
    CodeIn 
    TrimText(CodeInTrueFalseFalseFalse)
    If 
    CodeIn "" Then Exit Function

    'initialize columnar key
    KeyCol = TrimText(KeyCol, True, False, False, False)
    If InitColumnar(KeyCol) <> 0 Then Exit Function

    '
    decode column
    DecodeADFGVX 
    DecColumn(CodeIn)
    If 
    DecodeADFGVX "" Then Exit Function

    'initialize square key
    KeySquare = TrimText(KeySquare, True, False, False, False)
    If InitSquare(KeySquare) <> 0 Then Exit Function

    '
    decode square
    DecodeADFGVX 
    DecSquare(DecodeADFGVX)

    End Function

    Private Function 
    InitSquare(key As String) As Integer
    'initialize ADFGVX key

    Dim i As Integer
    Dim SquareKey As String
    Dim SQ As String
    Dim SquarePos As Integer

    '
    check key and text lenght
    If Len(key) < 3 Then
        MsgBox 
    "The Square Key is too small."vbCritical
        InitSquare 
    1
        
    Exit Function
        
    End If

    'delete doubles in key
    SquareKey = Left(key, 1)
    For i = 2 To Len(key)
        SQ = Mid(key, i, 1)
        If InStr(1, SquareKey, SQ) = 0 Then SquareKey = SquareKey & SQ
    Next

    '
    fill rest of key
    For 1 To 26
        SQ 
    Chr(64)
        If 
    InStr(1SquareKeySQ) = 0 Then SquareKey SquareKey SQ
    Next

    'fill key and figures in square
    SquarePos = 1
    For i = 1 To 26
        SQ = Mid(SquareKey, i, 1)
        Square(SquarePos) = SQ
        If Asc(SQ) > 64 And Asc(SQ) < 75 Then
            '
    after letter comes number
            SquarePos 
    SquarePos 1
            
    If Asc(SQ) = 74 Then
                
    'after J comes zero
                Square(SquarePos) = Chr(Asc(SQ) + 30)
                Else
                '
    after A comes 1after B comes 2 etc...
                
    Square(SquarePos) = Chr(Asc(SQ) - 16)
                
    End If
            Else
            
    Square(SquarePos) = SQ
            End 
    If
        
    SquarePos SquarePos 1
    Next

    'set column and row headers
    SquareCode(0) = "A"
    SquareCode(1) = "D"
    SquareCode(2) = "F"
    SquareCode(3) = "G"
    SquareCode(4) = "V"
    SquareCode(5) = "X"

    End Function


    Private Function EncSquare(PlainIn As String) As String
    '
    encode ADFGVX square

    Dim i 
    As Integer
    Dim j 
    As Integer
    Dim X 
    As Integer
    Dim Y 
    As Integer

    For 1 To Len(PlainIn)
        For 
    1 To 36
            
    'search for matching letter or number in key square
            If Mid(PlainIn, i, 1) = Square(j) Then
                '
    get row and column
                Y 
    Int((1) / 6)
                
    = (1) - (6)
                
    'encode to ADFGVX letter
                EncSquare = EncSquare & SquareCode(Y) & SquareCode(X)
            End If
        Next
    Next

    End Function


    Private Function DecSquare(CodeIn As String) As String
    '
    decode ADFGVX square

    Dim i 
    As Integer
    Dim X 
    As Integer
    Dim Y 
    As Integer

    'read off in groups of two (XY)
    For i = 1 To Len(CodeIn) Step 2
        '
    get row and column of ADFGVX letter
        Y 
    GetADFGVXcode(Mid(CodeIni1))
        
    GetADFGVXcode(Mid(CodeIn11))
        
    'get the decode letter in the key square
        DecSquare = DecSquare & Square((Y * 6) + X + 1)
    Next

    End Function


    Private Function GetADFGVXcode(CharIn As String) As Integer
    '
    get the number value of one of the ADFGVX letters
    Dim i 
    As Integer

    For 0 To 5
        
    If CharIn SquareCode(iThen GetADFGVXcode i
    Next i

    End 
    Function

    '----------------------------------------------------------------
    '
    '                       Vigenére Subs
    '
    '----------------------------------------------------------------


    Public Function EncodeVigenere(ByVal PlainIn As String, ByVal key As String) As String
    '
    Encode with vigenere

    Dim i 
    As Long
    Dim Cin 
    As Integer
    Dim Ckey 
    As Integer
    Dim Cout 
    As Integer
    Dim Keypos 
    As Integer

    key 
    TrimText(keyTrueFalseFalseFalse)
    If 
    Len(key) < 2 Then
        MsgBox 
    "Key size too small"vbCritical
        
    Exit Function
        
    End If

    PlainIn TrimText(PlainInTrueFalseFalseFalse)
    If 
    PlainIn "" Then Exit Function

    Keypos 1
    For 1 To Len(PlainIn)
        
    Cin Asc(Mid(PlainIni1)) - 64
        Ckey 
    Asc(Mid(keyKeypos1)) - 64
        Cout 
    Cin + (Ckey 1)
        If 
    Cout 26 Then Cout Cout 26
        EncodeVigenere 
    EncodeVigenere Chr(Cout 64)
        
    Keypos Keypos 1: If Keypos Len(keyThen Keypos 1
    Next i

    End 
    Function


    Public Function 
    DecodeVigenere(ByVal PlainIn As StringByVal key As String)
    'Encode with vigenere

    Dim i As Long
    Dim Cin As Integer
    Dim Ckey As Integer
    Dim Cout As Integer
    Dim Keypos As Integer

    key = TrimText(key, True, False, False, False)
    If Len(key) < 2 Then
        MsgBox "Key size too small", vbCritical
        Exit Function
        End If

    PlainIn = TrimText(PlainIn, True, False, False, False)
    If PlainIn = "" Then Exit Function

    Keypos = 1
    For i = 1 To Len(PlainIn)
        Cin = Asc(Mid(PlainIn, i, 1)) - 64
        Ckey = Asc(Mid(key, Keypos, 1)) - 64
        Cout = Cin - (Ckey - 1)
        If Cout < 1 Then Cout = Cout + 26
        DecodeVigenere = DecodeVigenere & Chr(Cout + 64)
        Keypos = Keypos + 1: If Keypos > Len(key) Then Keypos = 1
    Next i

    End Function

    '
    ----------------------------------------------------------------
    '
    '                       
    Playfair Subs
    '
    '
    ----------------------------------------------------------------


    Public Function 
    EncodePlayFair(ByVal PlainIn As StringByVal key As String)
    'encode with plaifair

    Dim i As Long
    Dim P1 As String
    Dim P2 As String
    Dim Bpos As Long
    Dim tmpText As String

    PlainIn = TrimText(PlainIn, True, False, False, False)
    If PlainIn = "" Then Exit Function

    Bpos = 1
    Do
        '
    replace J's by I's
        
    If Mid(PlainInBpos1) = "J" Then Mid(PlainInBpos1) = "I"
        
    If Mid(PlainInBpos 11) = "J" Then Mid(PlainInBpos 11) = "I"
        'check for double-letter bigrams
        If Mid(PlainIn, Bpos, 1) <> Mid(PlainIn, Bpos + 1, 1) Then
            '
    bigram ok
            Bpos 
    Bpos 2
            
    Else
            
    'bigram two identical letters, so insert X
            PlainIn = Left(PlainIn, Bpos) & "X" & Mid(PlainIn, Bpos + 1)
            Bpos = Bpos + 2
        End If
    Loop While Bpos < Len(PlainIn)

    '
    make even textlenght
    If Len(PlainInMod 2 <> 0 Then PlainIn PlainIn "X"

    'initialize key
    key = TrimText(key, True, False, False, False)
    If Len(key) < 2 Then
        MsgBox "Key size too small", vbCritical
        Exit Function
        End If
    If InitPlayFair(key) <> 0 Then Exit Function

    For i = 1 To Len(PlainIn) Step 2
        P1 = Mid(PlainIn, i, 1)
        P2 = Mid(PlainIn, i + 1, 1)
        EncodePlayFair = EncodePlayFair & EncodeDigram(P1, P2)
    Next

    End Function


    Public Function DecodePlayFair(ByVal CodeIn As String, ByVal key As String)
    '
    decode with plaifair

    Dim i 
    As Long
    Dim P1 
    As String
    Dim P2 
    As String

    CodeIn 
    TrimText(CodeInTrueFalseFalseFalse)
    If 
    CodeIn "" Then Exit Function

    'initialize key
    key = TrimText(key, True, False, False, False)
    If Len(key) < 2 Then
        MsgBox "Key size too small", vbCritical
        Exit Function
        End If
    If InitPlayFair(key) <> 0 Then Exit Function

    If Len(CodeIn) Mod 2 <> 0 Then
        MsgBox "Impossible to split text into Digrams", vbCritical
        Exit Function
        End If
        
    For i = 1 To Len(CodeIn) Step 2
        P1 = Mid(CodeIn, i, 1)
        P2 = Mid(CodeIn, i + 1, 1)
        DecodePlayFair = DecodePlayFair & DecodeDigram(P1, P2)
    Next

    End Function


    Private Function EncodeDigram(ByVal P1 As String, ByVal P2 As String) As String
    Dim X1 As Integer
    Dim Y1 As Integer
    Dim X2 As Integer
    Dim Y2 As Integer
    Dim tmpX As Integer
    Dim tmpY As Integer

    Call GetXY(P1, X1, Y1)
    Call GetXY(P2, X2, Y2)

    If X1 = X2 Then
        '
    same column
        Y1 
    Y1 1: If Y1 4 Then Y1 Y1 5
        Y2 
    Y2 1: If Y2 4 Then Y2 Y2 5
    ElseIf Y1 Y2 Then
        
    'same row
        X1 = X1 + 1: If X1 > 4 Then X1 = X1 - 5
        X2 = X2 + 1: If X2 > 4 Then X2 = X2 - 5
    Else
        '
    different col and row (Z methode)
        
    tmpX X1
        tmpY 
    Y1
        X1 
    X2
        X2 
    tmpX
    End 
    If

    P1 GetXYchar(X1Y1)
    P2 GetXYchar(X2Y2)

    EncodeDigram P1 P2

    End 
    Function


    Private Function 
    DecodeDigram(ByVal P1 As StringByVal P2 As String) As String
    Dim X1 
    As Integer
    Dim Y1 
    As Integer
    Dim X2 
    As Integer
    Dim Y2 
    As Integer
    Dim tmpX 
    As Integer
    Dim tmpY 
    As Integer

    Call GetXY
    (P1X1Y1)
    Call GetXY(P2X2Y2)

    If 
    X1 X2 Then
        
    'same column
        Y1 = Y1 - 1: If Y1 < 0 Then Y1 = Y1 + 5
        Y2 = Y2 - 1: If Y2 < 0 Then Y2 = Y2 + 5
    ElseIf Y1 = Y2 Then
        '
    same row
        X1 
    X1 1: If X1 0 Then X1 X1 5
        X2 
    X2 1: If X2 0 Then X2 X2 5
    Else
        
    'different col and row (Z methode)
        tmpX = X1
        tmpY = Y1
        X1 = X2
        X2 = tmpX
    End If

    P1 = GetXYchar(X1, Y1)
    P2 = GetXYchar(X2, Y2)

    DecodeDigram = P1 & P2

    End Function


    Private Function GetXY(Pchar As String, X As Integer, Y As Integer)
    '
    find X and Y from a character
    Dim PosP 
    As Integer

    PosP 
    InStr(1PlaySquarePchar) - 1
    Int(PosP 5)
    PosP - (5)

    End Function


    Private Function 
    GetXYchar(As IntegerAs Integer)
    'get the char by X and Y
    GetXYchar = Mid(PlaySquare, (Y * 5) + X + 1, 1)
    End Function


    Public Function InitPlayFair(ByVal key As String) As Integer
    Dim i As Integer
    Dim SQ As String

    PlaySquare = ""
    '
    delete doubles in key
    For 1 To Len(key)
        
    SQ Mid(keyi1)
        If 
    InStr(1PlaySquareSQ) = And SQ <> "J" Then PlaySquare PlaySquare SQ
    Next

    'fill rest of key
    For i = 1 To 26
        SQ = Chr(i + 64)
        If InStr(1, PlaySquare, SQ) = 0 And SQ <> "J" Then PlaySquare = PlaySquare & SQ
    Next

    End Function

    '
    ----------------------------------------------------------------
    '
    '                           
    General Subs
    '
    '
    ----------------------------------------------------------------

    Public Function 
    TrimText(TextIn As StringLetters As BooleanNumbers As BooleanSpaces As BooleanPoints As Boolean)
    'trim a strings letters, numbers, spaces or points
    Dim i As Long
    Dim tmp As Byte
    For i = 1 To Len(TextIn)
        tmp = Asc(UCase(Mid(TextIn, i, 1)))
        If Letters = True And (tmp > 64 And tmp < 123) Then
            TrimText = TrimText & Chr(tmp)
        ElseIf Numbers = True And (tmp > 47 And tmp < 58) Then
            TrimText = TrimText & Chr(tmp)
        ElseIf Spaces = True And tmp = 32 Then
            TrimText = TrimText & Chr(tmp)
        ElseIf Points = True And tmp = 46 Then
            TrimText = TrimText & Chr(tmp)
        End If
    Next
    End Function

    Public Function MakeGroups(TextIn As String, Groups As Boolean, GroupsPerLine As Integer) As String
    '
    devide code text in groups
    Dim i 
    As Long
    If Groups False Or GroupsPerLine 0 Then MakeGroups TextIn: Exit Function
    For 
    1 To Len(TextIn)
        
    MakeGroups MakeGroups Mid(TextIni1)
        If 
    i Mod 5 0 Then MakeGroups MakeGroups " "
        
    If i Mod (GroupsPerLine 5) = 0 Then MakeGroups MakeGroups vbCrLf
    Next
    End 
    Function

    Public Function 
    TestKey(aKey As IntegerkeyNumbers As BooleankeySpace As BooleankeyPoint As Boolean) As Integer
    'returns only allowed characters
    If aKey > 64 And aKey < 91 Then
        TestKey = aKey
    ElseIf aKey > 96 And aKey < 123 Then
        TestKey = aKey - 32
    ElseIf (aKey > 47 And aKey < 58) And keyNumbers = True Then
        TestKey = aKey
    ElseIf aKey = 32 And keySpace = True Then
        TestKey = aKey
    ElseIf aKey = 46 And keyPoint = True Then
        TestKey = aKey
    ElseIf aKey < 32 Then
        TestKey = aKey
    Else
    TestKey = 0
    End If
    End Function

    Public Sub loadPaperVersion(aTitle As String)
    '
    load the help on the pencil-and-paper version
    Dim FileO 
    As Integer
    Dim strInput 
    As String
    On Error 
    GoTo errHandler
    FileO 
    FreeFile
    Open App
    .Path "\" & aTitle & ".txt" For Input As #FileO
    strInput = Input(LOF(FileO), 1)
    Close FileO
    frmPaperVersion.Caption = "
    Paper Version of " & aTitle
    frmPaperVersion.Text1.Text = strInput
    Exit Sub
    errHandler:
    Close FileO
    End Sub 

    وفي الموديل الثاني ( modPrint ) :

    كود PHP:
    Public PrinterPresent As Boolean
    'Print module v3
    '
    sub PrintString
    'PrintString Text, leftfmargin, rightmargin, topmargin, bottommargin
    '
    margins are long values 0-100 percent
    Option Explicit

    Public Sub PrintString(printVar As StringleftMargePrcnt As LongrightMargePrcnt As LongtopMargePrcnt As LongbottomMargePrcnt As Long)
    Dim lMarge As Long
    Dim rMarge 
    As Long
    Dim tMarge 
    As Long
    Dim bMarge 
    As Long
    Dim printLijn 
    As String
    Dim staPos  
    As Long
    Dim endPos 
    As Long
    Dim txtHoogte 
    As Long
    Dim printHoogte 
    As Long
    Dim objectHoogte 
    As Long
    Dim objectBreedte 
    As Long
    Dim currYpos 
    As Long
    Dim cutChar 
    As String
    Dim k 
    As Long
    Dim cutPos 
    As Long

    On Error Resume Next

    Screen
    .MousePointer 11

    Printer
    .FontName "Courier New"
    Printer.FontSize 10
    Printer
    .FontBold False
    Printer
    .FontItalic False
    Printer
    .FontUnderline False
    Printer
    .FontStrikethru False

    txtHoogte 
    Printer.TextHeight("AbgWq")
    lMarge Int((Printer.Width 100) * leftMargePrcnt)
    rMarge Int((Printer.Width 100) * rightMargePrcnt)
    tMarge Int((Printer.Height 100) * topMargePrcnt)
    bMarge Int((Printer.Height 100) * bottomMargePrcnt)
    objectHoogte Printer.Height tMarge bMarge
    objectBreedte 
    Printer.Width lMarge rMarge
    Printer
    .CurrentY tMarge
    staPos 
    1
    endPos 
    0
    Do

    'get next line to crlf
    endPos = InStr(staPos, printVar, vbCrLf)
    If endPos <> 0 Then
        printLijn = Mid(printVar, staPos, endPos - staPos)
        Else
        printLijn = Mid(printVar, staPos)
        endPos = Len(printVar)
        End If
        
    '
    check lenght one line
    If Printer.TextWidth(printLijn) <= objectBreedte Then
        
    'line ok, keep line as it is
        staPos = endPos + 2
        Else
        '
    line to big, try to cut of at space or other signs within limits
        cutPos 
    0
        
    For 1 To Len(printLijn)
            
    cutChar Mid(printLijnk1)
            If 
    cutChar " " Or cutChar "." Or cutChar "," Or cutChar ":" Or cutChar ")" Then
                
    If Printer.TextWidth(Left(printLijnk)) > objectBreedte Then Exit For
                
    cutPos k
            End 
    If
        
    Next k
        
    'check result search for space
        If cutPos > 1 Then
            '
    cut off on space
            printLijn 
    Mid(printVarstaPoscutPos)
            
    staPos staPos cutPos
            
    Else
            
    'no cut-character found within limits, so cut line on paperwidth
            For k = 1 To Len(printLijn)
                If Printer.TextWidth(Left(printLijn, k)) > objectBreedte Then Exit For
            Next k
            printLijn = Mid(printVar, staPos, k - 1)
            staPos = staPos + (k - 1)
        End If
    End If
    '
    print line
    Printer
    .CurrentX lMarge
    currYpos 
    Printer.CurrentY txtHoogte
    If currYpos > (tMarge objectHoogte) - txtHoogte Then
        Printer
    .NewPage
        Printer
    .CurrentY tMarge
        Printer
    .CurrentX lMarge
        End 
    If
    Printer.Print printLijn
    Loop 
    While staPos Len(printVar)
    Printer.EndDoc
    Screen
    .MousePointer 0
    End Sub 

    ادخل الكود ادناه في زر الامر :

    كود PHP:
    Text3.Text EncodeColumnar(Me.Text1.TextMe.Text2.Text
    اتمنى لكم التوفيق

  2. #2
    UNKNOWN
    تاريخ التسجيل: January-2017
    الجنس: ذكر
    المشاركات: 17,041 المواضيع: 346
    صوتيات: 6 سوالف عراقية: 0
    التقييم: 32312
    آخر نشاط: 15/November/2020
    شكراً جزيلاً ع الموضوع
    ان شاء الله بالليل انفذها

  3. #3
    من أهل الدار
    تاريخ التسجيل: November-2014
    الجنس: أنثى
    المشاركات: 5,796 المواضيع: 5
    التقييم: 6955
    مزاجي: جيد
    آخر نشاط: منذ 3 يوم
    شكرا لك

  4. #4
    Software Developer
    Expert in Encryption
    اقتباس المشاركة الأصلية كتبت بواسطة رجل كهل مشاهدة المشاركة
    شكراً جزيلاً ع الموضوع
    ان شاء الله بالليل انفذها
    عفوا اخي الكريم
    تنورنا بأي وقت

  5. #5
    Software Developer
    Expert in Encryption
    اقتباس المشاركة الأصلية كتبت بواسطة زهر الربى مشاهدة المشاركة
    شكرا لك
    اهلا وسهلا زهر الربى

    شكرا للمرور الكريم

  6. #6
    مدير المنتدى
    تاريخ التسجيل: January-2010
    الدولة: جهنم
    الجنس: أنثى
    المشاركات: 84,931 المواضيع: 10,515
    صوتيات: 15 سوالف عراقية: 13
    التقييم: 87204
    مزاجي: متفائلة
    المهنة: Sin trabajo
    أكلتي المفضلة: pizza
    موبايلي: M12
    آخر نشاط: منذ 2 ساعات
    مقالات المدونة: 18
    عاشت ايدك علي ع الجهد الهائل والشغل المرتب ..تقييم

  7. #7
    Software Developer
    Expert in Encryption
    اقتباس المشاركة الأصلية كتبت بواسطة Suzana مشاهدة المشاركة
    عاشت ايدك علي ع الجهد الهائل والشغل المرتب ..تقييم
    منورة سوزانا وايدج العايشة

  8. #8
    من اهل الدار
    تاريخ التسجيل: June-2016
    الدولة: Iraq - Basra
    الجنس: ذكر
    المشاركات: 10,061 المواضيع: 593
    صوتيات: 17 سوالف عراقية: 4
    التقييم: 17512
    مزاجي: عادي
    المهنة: Programmer
    أكلتي المفضلة: البــــاچــــة
    موبايلي: IPhone 8
    آخر نشاط: 12/September/2024
    الاتصال:
    مقالات المدونة: 4
    مبدع أستاذنا العزيز

  9. #9
    انـثــى التفاصيـــل
    emigrer
    تاريخ التسجيل: January-2014
    الدولة: المنفىّ
    الجنس: أنثى
    المشاركات: 21,127 المواضيع: 1,960
    صوتيات: 36 سوالف عراقية: 0
    التقييم: 15097
    مزاجي: وردي
    المهنة: طالبة علم
    أكلتي المفضلة: لا شيئ
    الاتصال: إرسال رسالة عبر ICQ إلى هــاجــر إرسال رسالة عبر AIM إلى هــاجــر
    مقالات المدونة: 35
    شكرا.. وعاشت ايدك

  10. #10
    Software Developer
    Expert in Encryption
    اقتباس المشاركة الأصلية كتبت بواسطة ضياء المالكي مشاهدة المشاركة
    مبدع أستاذنا العزيز
    اهلا وسهلا ضياء

صفحة 1 من 2 12 الأخيرةالأخيرة
تم تطوير موقع درر العراق بواسطة Samer

قوانين المنتديات العامة

Google+

متصفح Chrome هو الأفضل لتصفح الانترنت في الجوال