C/C++ compréhension cryptage map 1.29

Inscrit
6 Mars 2017
Messages
3
Reactions
0
#1
Bonjour,
Je me suis mis en tête de créer un bot socket D1.29 sous Qt(C++) afin que celui-ci puisse être utilisable aussi bien sous windows que linux,
j'ai finalement réussis à connecter mon personnage au jeux a identifier le paquet qui gère la carte
(GDM), il serai constituer de la forme suivante : GDM|id_carte|date_creation|clef...
j'ai donc récupéré la clef et ai essayer de décrypter la carte avec celle ci ..
mais voilà mon soucis est que je ne comprend pas tout le fonctionnement du code et sans ca impossible de bien faire..

je poste le code que j'ai commenté, trouvé sur le forum a fin qui vous puissiez mieux m'aider :
C#:
private static string DecypherData(string data, string decryptKey)
        {
            try
            {
                var result = string.Empty;  //créer une chaine de caractére.

                if (decryptKey == "") return data; //si la clef est vide on retourne data

                decryptKey = PrepareKey(decryptKey);
                var checkSum = CheckSum(decryptKey)*2;

                for (int i = 0, k = 0; i < data.Length; i += 2)
                {
                    result +=
                        (char)
                            (int.Parse(data.Substring(i, 2), NumberStyles.HexNumber) ^
                             decryptKey[(k++ + checkSum)%decryptKey.Length]);
                           // ici je suppose que l'on recupére la chaine de caractere de data a l'emplacement (depart:i jusque i+2) et que l'on convertis le tout en hexa, le tout puissance
                          //  du caractére(k+1 +le checkSum)modulo longueur key

                }
                return Uri.UnescapeDataString(result); // ici je ne comprend pas vraiment ..
            }
            catch
            {
                return "error";
            }
        }

        private static string PrepareKey(string key)
        {
            var keyResult = string.Empty;
            for (var i = 0; i < key.Length; i += 2)
                keyResult += Convert.ToChar(int.Parse(key.Substring(i, 2), NumberStyles.HexNumber));
                // retournerai le caractére Obtenu par le code ASCII en Hexa de key a l'emplacement depart i et deux caractères plus loin)

            return Uri.UnescapeDataString(keyResult); // je ne comprend pas non plus ici ..
        }

        private static int CheckSum(string data) => data.Sum(t => t%16)%16;  // mais mon plus gros soucis se situe sur cette fonction ci que je ne comprend pas du tout ..
je me suis inspirer de ce post : https://cadernis.fr/index.php?threads/système-de-décryptage-mapdata-dofus-1-29x.1790/
 
Dernière édition:

BlueDream

Administrateur
Membre du personnel
Inscrit
8 Decembre 2012
Messages
2 010
Reactions
149
#2
Hello,

J'ai retrouvé ces quelques classes dans le projet MaxouBot, cela devrait t'aider.

Maps.vb
Code:
Module Maps

    Private Sub LoadRessources(ByVal index As Integer, ByVal spritesHandler() As Cell)

        With comptes(index)

            Dim listeID As New List(Of Integer)
            Dim listeNom As New List(Of String)
            Dim listeMovement As New List(Of Boolean)

            Dim ligne As String = "a"
            Dim reader As New IO.StreamReader("data/ressources.txt")

            While (ligne <> Nothing)
                ligne = reader.ReadLine
                If ligne <> "" Then
                    Dim total() As String = ligne.Split(":")
                    If (total.Length = 3) Then
                        Dim id As Integer = total(0)
                        Dim nom As String = total(1)
                        Dim movement As String = total(2)
                        listeID.Add(id)
                        listeNom.Add(nom)
                        If (movement = "o") Then
                            listeMovement.Add(True)
                        Else
                            listeMovement.Add(False)
                        End If
                    End If
                End If
            End While

            reader.Close()

            Dim j As Integer = 0

            .TabUtilisateur.ListeRessources.Items.Clear()
            For i As Integer = 1 To 1000
                If (listeID.Contains(spritesHandler(i).layerObject2Num)) Then
                    .TabUtilisateur.ListeRessources.Items.Add(listeNom(listeID.IndexOf(spritesHandler(i).layerObject2Num)))
                    .TabUtilisateur.ListeRessources.Items(j).SubItems.Add(i.ToString)
                    .TabUtilisateur.ListeRessources.Items(j).SubItems.Add("Non coupé")
                    spritesHandler(i).object2Movement = listeMovement(listeID.IndexOf(spritesHandler(i).layerObject2Num))
                    j += 1
                End If
            Next

        End With

    End Sub

    Public Sub LoadMap(ByVal index As Integer, ByVal idMap As String, ByVal indice As String, ByVal clef As String)

        With comptes(index)

            Try

                .changeurBas = -1
                .changeurDroite = -1
                .changeurGauche = -1
                .changeurHaut = -1

                .TabUtilisateur.Log("(Debug) Loading map " & idMap, Color.Black)

                If Not IO.Directory.Exists("maps") Then IO.Directory.CreateDirectory("maps")

                If Not IO.File.Exists("maps/" & idMap & "_" & indice & "X.txt") Then

                    Dim Unpacker As New SwfUnpacker
                    Unpacker.SwfUnpack(idMap & "_" & indice & "X.swf")

                End If

                Dim mapReader As New IO.StreamReader("maps/" & idMap & "_" & indice & "X.txt")

                Dim mapData As String = mapReader.ReadLine

                mapReader.Close()

                mapData = Gettok(mapData, "|", 2)

                Dim preparedKey As String = prepareKey(clef)
                Dim sData As String = decypherData(mapData, preparedKey, Convert.ToInt64(checksum(preparedKey), 16) * 2)

                .mapDataActuel = uncompressMap(sData)
                .mapActuelle = idMap
                .TabUtilisateur.CoordsMap.Text = GetMapPos(idMap)

                For i As Integer = 1 To 500

                    If (.mapDataActuel(i).movement = 2) Then

                        Dim x As Integer = getX(i)
                        Dim y As Integer = getY(i)

                        If ((x - 1) = y) Then
                            .changeurGauche = i
                        ElseIf ((x - 27) = y) Then
                            .changeurDroite = i
                        ElseIf ((x + y) = 31) Then
                            .changeurBas = i
                        ElseIf (y < 0) Then
                            y = Math.Abs(y)
                            If (x - y = 1) Then
                                .changeurHaut = i
                            End If
                        End If

                    End If

                Next

                LoadRessources(index, .mapDataActuel)

            Catch ex As Exception
                MsgBox(ex.Message, MsgBoxStyle.Critical, "Error : Maps.vb --> LoadMap(" & idMap & ")")
            End Try

        End With

    End Sub

End Module
Maphandler.vb
Code:
Public Module Maphandler

    Public HEX_CHARS() As String = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F"}
    Public ZKARRAY As String = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_"

    Private Function unescape(ByVal StringToDecode As String) As String

        Return System.Web.HttpUtility.UrlDecode(StringToDecode)

    End Function

    Public Function prepareKey(ByVal key As String)

        Dim d As String = key

        Dim _loc3 As String = ""
        Dim _loc4 As Integer = 0

        While (_loc4 < d.Length)
            _loc3 = _loc3 + Chr(Convert.ToInt64(d.Substring(_loc4, 2), 16))
            _loc4 += 2
        End While

        _loc3 = unescape(_loc3)

        Return _loc3

    End Function

    Public Function decypherData(ByVal d As String, ByVal k As String, ByVal c As Integer)

        Dim _loc5 As String = ""
        Dim _loc6 As Integer = k.Length
        Dim _loc7 As Integer = 0
        Dim _loc9 As Integer = 0

        While (_loc9 < d.Length)
            Dim a As Integer = Convert.ToInt64(d.Substring(_loc9, 2), 16)
            Dim b As Integer = Asc(k.Substring((_loc7 + c) Mod _loc6, 1))
            _loc5 &= Chr(a Xor b)
            _loc7 += 1
            _loc9 += 2
        End While

        _loc5 = unescape(_loc5)

        Return _loc5

    End Function

    Public Function checksum(ByVal s As String)

        Dim _loc3 As String = 0
        Dim _loc4 As String = 0

        While (_loc4 < s.Length)
            _loc3 = _loc3 + Asc(s.Substring(_loc4, 1)) Mod 16
            _loc4 += 1
        End While

        Return (HEX_CHARS(_loc3 Mod 16))

    End Function

    Public Function hashCodes(ByVal a As String)
        Return ZKARRAY.IndexOf(a)
    End Function

    Public Structure Cell
        Dim movement As Integer
        Dim layerObject2Interactive As Boolean
        Dim layerObject2Num As Integer
        Dim object2Movement As Boolean
    End Structure

    Public Function uncompressCell(ByVal sData As String) As Cell

        Dim _loc5 As Cell
        Dim _loc6 As String = sData
        Dim _loc7 As Integer = _loc6.Length - 1
        Dim _loc8(5000) As Integer

        While (_loc7 >= 0)
            _loc8(_loc7) = hashCodes(_loc6(_loc7))
            _loc7 -= 1
        End While

        _loc5.movement = ((_loc8(2) And 56) >> 3)
        _loc5.layerObject2Num = ((_loc8(0) And 2) << 12) + ((_loc8(7) And 1) << 12) + (_loc8(8) << 6) + _loc8(9)
        _loc5.layerObject2Interactive = ((_loc8(7) And 2) >> 1)
        Return _loc5

    End Function

    Public Function uncompressMap(ByVal sData As String) As Cell()

        Dim _loc10(1024) As Cell
        Dim _loc11 As Integer = sData.Length
        Dim _loc13 As Integer = 0
        Dim _loc14 As Integer = 0

        While (_loc14 < _loc11)
            Dim _loc12 As Cell = uncompressCell(sData.Substring(_loc14, 10))
            _loc10(_loc13) = _loc12
            _loc14 += 10
            _loc13 += 1
        End While

        Return _loc10

    End Function

End Module
 
Inscrit
6 Mars 2017
Messages
3
Reactions
0
#3
Tout d'abord je te remercie pour la rapidité de ta réponse :)
j'ai travailler sur le decryptage de la map cet apres midi j'en suis finalement arriver a ce code :
key = "2c73354461624d717c67627d374e55266761566a42316c613a2d61622c6b28436f403d7d417036607858212d685b374a403873503857302649627277727d7e27253242247d374829337634747320287f673e64665b456d47336f32253242266c615934566c3d662f3f796640317d2c4945624236507a7b5d575f39382862553e55693d6e5d6f4e21343b36687f29747e7529572f6627247e405e4b497a712d594338296b3a7a5e3223375b532a39792a5c772c40543c4c586e487e464c75526a652231692e71754237247e262a217a";
data="24095b4c04034d0a492227285c1c2411570119396945093a522b21591231703f51472c031316131c364f4a451856294852177c1c12414d1e065f0507132d0c26560e534a470d29315537095c074e5e182e28501c49282403235718121a3c323e585949031d563408580f3c0e2f407c5357091a48151f14481f470746411f213f2a2832194c382659480a5b1b165a42563e324b58184b141f4d21315d2d390f29362e2d14370b044350086619142352451f474b40324412542100032c101d2f0a1c562b3447060037222a500d045b4c00034d2340220e255c1c2011572810394048093a562b21701b31593251472803133f1a1c1f424a451c5629615b1755111241491e06760c073a200c26520e53634e0d003c55370d5c076757180725501c4d28242a2a57311f1a3c363e58704003345b34085c0f3c272640555e57091e4815361d48364a0746451f211623281b144c3822594823521b3f5742563a324b71114b3d124d21355d2d1006291f232d14330b046a59084f14142356451f6e42401b49125425000305191d06071c562f34472f09370b245a5b005b4c290a4d0a4d220e215c1c091857011d39404c093a7f222159163159365147010a1316171c1f464a45355f29485617551512416017065f01073a240c267b07534a430d003855372455074e5a180721501c642124032757311b1a3c1f3758594d03345f340875063c0e2b40555a57093741151f1048364e07466c16213f2e281b104c380b50480a5f1b3f534256133b4b581c4b3d164d211c540b390b291f272d141a02044354084f1014237f4c1f474f401b4d12540c09032c141d06031c56063d470604370b23500d29524c00074d0a49220e08551c2015570119394065003a562f21591231591f584728071316131c1f6f43451c51231e5217553c1b41491a065f05073a020526520a534a44074c115c370d5b0d175d125508591c4d2c240323573132131a363a5859490334763d2e5c0b3c0e2f4055735e091e4c151f144836670e46451b213f2a281b394538225d480a5b1b3f7a4b563a364b58184b3d3f442135592d390f291f0e2414330f044350084f391d2356411f474b401b641b542504032c101d062a15562f334d51033d220a590d005c4659034d0a602b0e21581c201157013030664c0d3a562b21593b387f365547280313163a1539464e451c5629487b1e55151641491e065f2c0e3a240826520e534a6e04003851370d5c074e77110721541c4d2824030a5e311b1e3c363e5859600a125f30085c0f3c0e0649555a53091e4b1f303241364e0346451c2b6703211b104b32755a422472123f53455c6d324b5831423d164921355d2d39262039272914330b04436101662b102356451f4762493d4d16542500032c21142f5218562f344706293e0b23540d005b4c002a440a49260e215c1c20385e01193d404c093a56022859123559365147282a1a3013181f464a451c7f206e52135515124149380f5f0500307d0c2652275a4a470a0a6f55370d7a0e4e5e1f0d765316430e2d032353311b19362417517f4907345f34085c2635282f44555a57091e611c39144c364e0746453628192a2c1b104c382270410a5b1f3f5342563a1b4258184f3d164d21357424390f2d1f272d1433220d43500c4f101423566c16614b441b4d125425310a05411906031c562f1d4e2000330b23500d007d4500034a001e220e21751506115301193a4d4a38335510255912325430784e0e031716131c1f467b4c35072d48521755153b486f1e025f05073a243d2f7b5f574a470d00387c3e0d5c034e5e18072179154d2820032357311b3335363e5c594903345f1d015c0f380e2f40555a7e003848111f1448364e2e4f631f253f2a281b10653104594c0a5b1b3f536b5f1c324f58184b3d166428135d29390f291f27041d150b004350084f103d2a70451b474b401b4d3b5d0300072c101d0603355f0934430600370b237904265b4800034d0a491307086718201157011910494c093e562b215912185036514328031316133516464a411c562948523e5c151245491e065f0536330d5d22520e534a4724091e55330d5c074e5e290e0801184d282403237e383d1a38363e585949323d76650c5c0f3c0e2f695c7c570d1e48151f14793f675642451f213f2a0112364c3c2259480a5b2a367a13523a324b58186234304d25355d2d390f0016272d10330b044350214610142756451f474b69124d12502500032c10340f031c522f344706001e02235009005b4c000364036f220a215c1c20117e083f39444c093a562b085034315d36514728033a1f351c1b464a451c560041741751151241491e2f5623073e240c26520e7a43610d043855370d5c2e4778180321501c4d280d0a0557351b1a3c363e71504903305f34085c0f15072f40515a57091e483c161448324e0746451f08362a281f104c38225961035b1b3b5342563a326251184b39164d21355d1c3026781b272d14330b2d4a76084b10142356452e4e62111f4d125425003225132602031c55251c760f03660f23500d005b6509254d0e49220e215c2d293806051939404c09135f0d215d123159365176212a4212131c1f464a6c1556294c521755151268401e065b05073a240c0f5b0e534e470d0038551e045c074a5e180721503a442824072357321116153f18585d4903345f342155293c0a2f40555a5720176e151b1448364e076f4c1f213b2a281b104c112b59480e5b1b3c59657033324b5c184b3e1c54083c7b2d3d0f291f272d3d3a2d044750084f10140a5f631f434b401b4d12722c000328101d050e1f7f2634470200370b235024095b4c04034d0a492227285c1c24115701193969452f3a522b21591231703f77472c031316131c364f6c45185629485217641c3b104d1e065f0507132d0c26560e534a470d293155370a565e4d542e2e28501c4a227303235718121a3c323e585949031d561208580f3c0e2f4064537e581a48151f14481f470746411f213f2a2832194c382659480a5b1b165a42563e324b58184b141f4d21315d2d390f29392e2d14370b04405a366619322352451f474b40324434542100032c101d2f0a3a562b3447060037222a500d045b4c00034d2340220e255c1c2011572810394048093a562b21701b31593251472803133f1a1c1f424a451c5629615b3155111241491e066e0c2e01200c26520e53634e0d003c55370d5c076757180725501c4d28242a2a57311f1a3c363e587f4003345b34085c0f3c282640555e57091d4226361d6e364a0746451f210e23014a144c3822594823521b3f5742563a324b71114b3d124d21355d2d1006291f232d14330b046a59084f14142356451f6e42401b4912542500031d193457071c562f34472f09110b27500d005b4c290a4d0a4d220e215c1c091857011d39404c093a7f222159163159365147010a3516171c1f45406c3a5f2948551d0c16186f6017205f01073a240c267b07754a430d003855372455074e5a180721501c642124032757311b1a3c1f3758594d03345f340875063c0e2b40555a57093741151f1048364e0746741622042e281b104c380b506e0a5f1b3f534256133b6d581c4b3d164d211c542d390b291f272d141a02044354084f1319247f4c1f474f401b4d12540c09252c141d06031c56063d610604370b23500d31526551074d0a49220e07551c201557011a335365003a562f21591231591f584728071316131c1f6f43451c5229485217553c1b41491a065f05073a0d0526520a534a470d00115c110d58074e5e18071059351c2c240323573132133c363a5859490334763d085c0836572f4055735e091e4c151f144836670e6045182b662a281b39451e225d480a5b1b3f7a4b703a364b58184b3d3f442135592d390f291f0e2414330f044350084f391d2356411f474b401b641b542504032c101d062a15562f30470600370b0a590d005f4c00034d0a602b2821581c201157013030664c0d3a562b21593b3859365547280313163a151f464e451c562948741e55151641491d0c4f2c0e3a240826520e534a6e04263851370d5c074e6f112e70541c4d2824030a5e311b1e3c363d520d600a345f30085c0f3c0e0649555a53091e48151f3d41364e0346451f213f03211b1048382259480a7d123f5346563a324b5831421b164921355d2d393e2036762914330b044379016910102356451f476d491b4d165425030e29361406031b5c76344706293e0b23540d005b4c002a442c49260e215c1c20385e27193d404c093a561a2870293559365147282a1a1613181f464a451c7f204852135515114b66370f5f05033a240c2652275a4a4709003855370d750e4e5e1c0721501c4d012d252353311b1a3c3617517f4907345f34085c2635282f44555a57091e611c39144c364e07464536283f2a2c1b104c38227f410a5b1f3f5342563a1b4258184f3d164d21356c24105e2d1f272d1433220d65500c4f101423566316474b47111a115e37290a2c101a0c5a1b5c1c1d4e0600330b2353072a72450003490a49220e217a1520115301193a4a592033702b255912315936604e01521716131c1f46634c3a562d48521755152348604f025f05073a24252f740e574a470d00387c3e0d5c034e5e18072179154d28200323543b4f3335363e5c594903345f1d017a0f380e2f40555a7e003848111f1448364e214f451f253f2a2b1107653122594f000c1b3f536b5f3a324f58184b3d166428355d29390f291f27041d150b004350084f103d2a70451b474b401b4d3b5d0300072c101d0603355f0934430600370b237904265b4800034d0a490b07075c18201157011910494c093e562b225335185036514328031316133516464a411c56294852265c3c4345491e065f052e33020c22520e534a4724091e5530070b074e5e310e2150184d2824032371381b1a38363e5859492a3d79340c5c0f3c0e2f715c73060d1e48151f146e3f4e0742451f213f2a1912391d3c2259480a5b32367542523a324b58187a343f1c25355d2d390f0016272d10330b04435021461014245c1c1f474b66124d12532f560021122c0f0027522f344706001e02055009005b4c000364036f220a215c1c20117e083f39444c093a562b085012315d36514728033a1f351c1b464a451c560041741751151241491e205605073d2e5b26520e7543470d043855370d5c2e4778180321501c4d280d0a0557351b1a3c363e71504903305f34085c0f15072f40515a57091e483c161448324e0746451f08362a281f104c38225961037d1b3b5342563a327a51311a39164d21355d043029291b272d14330b354a79594b1014235645364e6d401f4d125425003225394c02031c562f34610f00370c29070e0a686a09034d0e49220d2b5035291157051939404c090b5f02705d12315936516e21031312131c1f464a6c1556294c521755151268401e065b05073a240c0f5b0e534e470d0038551e047a074a5e1807215035440e24072357311b1a153f18585d4903345f342155293c0a2f40555a5720176e151b1448364e076f4c39213b2a281b104c1e2b59480d514c3c594d7033324b5c184b3e1c7b073c5d2d3d0f291c2d043d3a0b044750084f10140a5f451f434b401b4d127d2c000328101d06031c7f2634470200370b235024095b4c04034d0a492227287a1c2411570119397145206b522b21591231683f527c2c031316131c2e4f63141856294852177c1c34414d1e065f05070b2d2577560e534a470d293155370a56504d531e2e28501c4a227303235717121a3c31340f5a43291d5634085b05650e2f407c5357091a48151f14481f470746411f213f2a2832194c382659480a5b1b165a42563e324b58184b141f6b21315d2d390f29362e0b14370b044350086619142352451f474b40324412542100032c101d2f0a3a562b3447060037222a760d045b4c00034d2340220e255c1c2011572810394048093a562b21701b31593251472803133f1a1c1f424a451c5629615b1755111241491e06760c073a200c26520e53634e0d003c55370d5c076757180725501c4d28242a2a57311f1a3c363e5868402a655b34085c0f3c272640555e57091e4815361d48364a0746451f211623281b144c382259483b52326e5742563a324b71114b3d124d213657151006291f232d143001206a59084f171e7456451f6e42401b4a18032500030a191d06071c562c39452f09370b27500d005b4c290a4d0a4d220e215c1c091857011d39404c093a7f222159163159365147010a3516171c1f464a45355f29485617551512416017065f01073a240c267b07534a430d003855372455074e5a180721501c642124032757311b1a3c1f3758594e096d5f340875063c0e2b40555a57093741151f1048364e07466c16213f2e281b104c380b50480a5f1b3f5342561c3b4b581c4b3d1547301c542d390b291f272d141a02044354084f101423704c1f474f401b4e18440c09032c141d06031c56063d470604370b23500d29524c00074d0a49220e08551c2015570119394065003a562c2b0f1231591f584728071316131c1f6f43451c5229485217553c1b41491a065f05073a0d05265209591c470d00115c370d58074e5e180708591c4d2c240323573132133c363a5859490334763d085c0b3c0e2f4055735e091e4c151f17453a";
la data est la clef étant déclaré ainsi à a fin de faire des tests


C:
 key = prepareKey(key);
    bool ok ;
    QString retour = decryptMap(data,key,checkSum(key).toInt(&ok,16)*2);
    qDebug()<<retour;
 
   /* Dim preparedKey As String = prepareKey(clef)
                  Dim sData As String = decypherData(mapData, preparedKey, Convert.ToInt64(checksum(preparedKey), 16) * 2) */
QString ClientTcp::decryptMap(QString d, QString k,int c)
{

QString loc5 ="";
int loc6 = k.length();
int loc7 =0;
bool ok;
QChar lettre;
for(int loc9=0;loc9<d.length();loc9= loc9+2)
{
int a = d.mid(loc9,2).toInt(&ok,16); // récupére le nombre( en HEXA) a l'emplacement loc9, 2 sur la chaine d
int b =k.at((loc7+c)%loc6).toLatin1(); // je pense que ce code récupére le code caractére a l'emplacement (loc7+c)modulo longueur de k sur le chaine k

qDebug()<<b<<" carac: "<<k.at((loc7+c)%loc6).toLatin1();

loc5+=QString::number(a^b); // operation Xor binaire
loc7++;
}
loc5 = loc5.toUtf8();
return loc5;

/*
Dim _loc5 As String = ""
Dim _loc6 As Integer = k.Length
Dim _loc7 As Integer = 0
Dim _loc9 As Integer = 0

While (_loc9 < d.Length)
Dim a As Integer = Convert.ToInt64(d.Substring(_loc9, 2), 16)
Dim b As Integer = Asc(k.Substring((_loc7 + c) Mod _loc6, 1))
_loc5 &= Chr(a Xor b)
_loc7 += 1
End While

_loc5 = unescape(_loc5)

Return _loc5
*/

}
C:
QString ClientTcp::prepareKey(QString d)
{

QString loc3 ="";
QChar lettre;
bool ok;
for (int loc4=0;loc4<d.length();loc4 = loc4+2)
{
lettre= d.mid(loc4,2).toInt(&ok,16); // récupére le caractére codé en hexa sur le chaine "d" à l'emplacement loc4, +2
loc3+=lettre;

}
loc3 = loc3.toUtf8();
qDebug()<<loc3;
return loc3;

}
C:
QString ClientTcp::checkSum(QString s)
{
   int loc3 = 0;
   QStringList liste;
   liste <<"0"<< "1"<< "2"<< "3"<< "4"<< "5"<< "6"<< "7"<< "8"<<"9"<< "A"<< "B"<< "C"<< "D"<< "E"<< "F";
   for (int loc4=0;loc4<s.length();loc4++)
   {
       loc3 = (s.at(loc4).toLatin1())%16; //récupère le n° caractère  a la pos loc4 et récupéré le reste de sa division par 16
   }
   return liste[loc3%16];

/*
Dim _loc3 As String = 0
Dim _loc4 As String = 0

While (_loc4 < s.Length)
    _loc3 = _loc3 + Asc(s.Substring(_loc4, 1)) Mod 16
    _loc4 += 1
End While

Return (HEX_CHARS(_loc3 Mod 16))
*/


}
cependant mon résultat est étrange:
10256554562464410410173151075192251082211347891729402358112221982931111051628379011697107685052986110010710847325253335512110611712745120116191046413756213116982720103117474810223106786621545111881666718425291959411288355094749134811210910548122416561101028410533363432961101155652541181676152210312102109165012311866859810761472211065912479761032472119113783510598189776896712252812552115113199444954622596108114113312109940107107126279072321001250108127118106101133866503366122151117111211988256104456815663904611509311510611012017127918343104425886325650110438770126372353111118155530561157303689534855521721091231028863121533711311610212410074332166521468795436526119291825310033798511805311434096296353872898310521134946585485104861765942316398125258269381111512110982643499932110221101474112736784184103557250556449828886447122761154153561032218361253551601244311199107853798120751087039108781410678107279615199864102491041221231065312247125271628223571101051202757285464834610076391712299124619163361064350551153451123104734698256828391235336511009414114731852331046153991181125120168575106875237691211191053697741136111862371247183124311089812710798127641184538107337310388452387811111110571792127464512310112713931105741021951152012511991661024014801225330846270117403052372122107110835029421261113561341201181103557120375411912417525164861051103311378484955732444466788982345761161094412091108144012157111283683651111273231942123773686958748213661956271173975105605561351097135715377159712410362553910011059910561868248851021031075712711021116614510012739802110332476751117103251051265612758464698639116611256511899145140241161113030194581581786356135125289931114012210401798581610272528502367812760571277125541251051212799121733126251131553687177362643850696210811510434114812110311212117816329108981755371004711987101917631251181232148928192971088812264926841206675205530991077827568129121159211090246773101519535591051163482413122742475727999311452763423373596112191199210057911267122385628231191271012104521006374538867210911416716743231083115101227211111121304486120161172299478854912796750611361087412218115112111138113281189551802441101157539311938166095167556311768412257512346178351041810511781706854305954399011811234872433246331151108977291235365108921078211730579679872125101911084773596294113117627218791643712010330107104116362336184338694222121307061119119660114111921241105861667010265571412511011896106725511224756468166036243116212348381258188988239999583104305712119181079287766711117971762126109841253912769381261787108811174910911964122544079502111912610425104131271266194723411692314127988831131155920676226477074221034791139412751211166713108841051211163011696811171136074643429263441121276812764678091141001081007976284243110892333735640315382843738641208646979454774477951210158769895123112287858853331157079889344110998636628196911748561061081161811064222681011201892920904271102711111185641874850943316575126791252018412586126102528518526428727478464888575517101215811104935599275938109981065721555351051036896101864168865141401061141734302943224912650106715823298760751161268512069121429194383649943782127017127543841108112101965076612210996431021231091262922449741195180416087107110739763125591181216119609338314042102125561223012684701031181021190109427108336153891195711217912012212122061126531086281212468649291651259112110754123231552679661868886784588310411612083698564812252011621101909812594431410094119103299910268107219311514912548103756478561298114753043126861211028973122412619251111234693811960112165856116107122121119471086886791114268111411115821161031979646425766526412573843911121112185311061147256431077197101931188380119219118689805084126554598611522616053103103117106251045171132077126281271181068974101401111187939741151231111758601262224531269457126118119291001252828842213668348645110775110778251011259521201033111114835143150125740122821007727103279773971437110581275610393441124411215126508653510525113871250910611585102312121102738727127462052603560122737155775157981466772105105682471125326786210310112184961160123112142951227866421184412533466898351066732371271216542311964035127125371074314576111561871041048324118126126336428212759692754323012790483028124118431175532633419183057311084616336101101532310363994510111126891021027014472921155454121355612138114103955974712598131141117489382810780431819835205948781029111850693611261965110198220123871061412218921032571686489110123114589212398433355766415558812358361243667810116196276111101107469869463011010211159321286933043011111343566769542612651731084011086186664912137116119691181161260363412372421261247695848011299714751103107117451162851000753909710996581122347388992854659111164939949680594174674431219712412210411811037481732847861187626603611670323011512297105126102711272785308099010011124112327065512311022803010277344111316781271242525765707891066634831116017661031141252512101541022511312429632712293305142116891611182302711344119118222885106195070795611342714420535081100213152711029840641228820521228320674532741263611379581203528479410369097285211562429793105464983648058704286114783886551182115126126348103627871341076385901315101115591031112623107911611971123281195949887812555625100102471032011659287195116413471332812044841256914161365164511145571110910911473574110444247285111212772843242712476341122044332459114411459954899975663131025642118357895363971161031092211259878012477841030113100511611110123115541214341624710876212345688980355866108114483776123731131179740112174936212734234496119346611171252416885100499158119674259853321611081931711184172631189658456786116854279606314931937110542741012463820113761264960127690638112341094123342217922826621125631156510916951191158212249096676522575204461016773106120805471667299534657504343335910910813409912196107629119892911812081178737471043844881566499510033264139109377317831137017767012119808571611005625875113792024539522712010111652296711411694109998335643281241105311838689112371236011410010122102451016174110556125541133673441171112110582714042101361232037106536769976572291251071139736511733111126235929612512575512242789012115586069119901310751134711141356811411911561911471035712784911072497098191261297591902374103251221109674981005112181981034631061102811112567634210190721011061084311586110691125124945406129442102534295583832127201090114104111177769981241471163580441211512572115109912163101158112636352964975536780051113323111978126641110910568126101123916827691671596012722786070439986131687835091618794687432112304517109114443356116395363974632415455114338939109111101118112192649996112441972215365527610423222117910317116328932259178012210272430201244210298574536110394936249645961102555110100651236736428711874777497459110946208549891063351082383012585991221211328722811667381676012410460127106564274067191121284606050985153127112529109574611655104385511710462831051202196711041059401079840123581194887962104124127121113493790261119910766753410764924295911270347447121201191282115291151001274221111256051811129932301156912025674153126122419328311173831103612159836244150179586711990116106371127212020442764889151011141267376246634124125471105110132660933118614036912878452119451067227122108168275032126812685588807387611985371181855104775410380111208412379961123985335598571086654223724125111724100954725053178033936911569546359431253297908085373110814991017081791175311214675151251151369110100141213712561111118811470411011423126355112973410532606911094834336589113110124648694161241256642119941095986154111939509186858525201089177317993127646684571231201062646104677743704059747118135312441115821015281448312045743887512611382849310199971075755841234048921550251041259311060924531141469106451158437100593810501225698648411311063581248501268510512034394111122561038347689453111532521101127111291021054337118114979710910112881899914125541149911162497581225464422110978121931234843563921081044092711256515454639647739118957012179301231011052345510062911071271411671821635928329286835738369111389911312730712612740607093474461188793492114271095473109512312682123120273333369666912764122429789649242424112127110632374453466411016126222212752287495217223119381801222345114104594894973663826111211162501249065527211865735791101643210132108828223697612010625122477412095341044811968393123981002319251112673112103718810088373310234354537116961112536861087912179111118105606689855111436706358701692860112115811292618067136433288311459737910542901931181051191244135487767124111125304456126743647581201111244131195210799127917420388724106143511274543364121603516975325915837910138469819102481141179471138210110112290105125859410278117351049312412088571632113107526697100424048679170651263910549511126785305012782166912350121611249871041011268762312102911019120325104469243107211779902323101124306610125103102106111191246975491410518259447100636233847515342103283255093121121429241122694811650105635849812511118401421106133868112362472281141205147716712110562707711472344068169256431167312610711111124104122671965088865359528566059991036710223481124325610931191840167975120919810432270114511112159571310511811810596321173612539941651551083059591067576981219511255445116108256012511215189715606381117124127378421177310114213751948268111120153111944211092125102631095812197100459927873112248127781845594211510011310038481011193831433638588999234976965912790191095981149839711774808165161157961482910127431089988618691161810010357101211156154959332115113114274710110676298801102110281601410740164311411510010082243722796751232795478310738807144259902692514911411932123111561076865401212810459212612510239471117777418011133484126296686118152572751612280125548730125554012587364321043687291078279820234910924459745110127401174955989549626894849151061121237710270291191064193124723741480851267841143982326912612225669260706910211341874791221290120118754899941149558504912783577363178724647122632810210112711456871271009398684153492878330123108202515491920249173618110109210956115317496489518118910949975416913271120366638111113112114120194088934511448111126531245285105361234156101481115583641141051011029312232171268511650102742319117521181011083241161196382011853999241425559637116837292851015510510731165361235012371183411127993912311789115281171131930865712451011112012391482156534163439022124658999944490114921151201136766635952528331811157898676304429105122104120100126558739951221227494165711149311132315111193812111356510610031926460421015351521059262141012129669313607210858395483351168316621259897393310711268562810244191051231115997122981133768541038881139091981164097242921755175111511048991938816397125683215122
 
Dernière édition:
Inscrit
5 Novembre 2016
Messages
56
Reactions
2
#4
ceci pourras t'aider
Java:
public static int checkSum(String keyMap) {
        return keyMap.chars().map(s -> s % 16).sum() % 16;
    }

    private static String decypterData(String data, String decryptKey) throws UnsupportedEncodingException {
        String result = "";

        String decryptedKey = prepareKey(decryptKey);
        long checkSum = checkSum(decryptedKey) * 2;

        for (int i = 0, k = 0; i < data.length(); i += 2) {

            String hex_code = data.substring(i, i + 2);
            int hex_int = Integer.parseUnsignedInt(hex_code, 16);
            char power = decryptedKey.charAt((k++ + toIntExact(checkSum)) % decryptedKey.length());
            int op_result = hex_int ^ power;

            result += (char) op_result;

        }

        return URLDecoder.decode(result, "UTF-8");
    }

    private static String prepareKey(String decryptKey) throws UnsupportedEncodingException {
        String keyResult = "";
        for (int i = 0; i < decryptKey.length(); i += 2) {
            String hex_code = decryptKey.substring(i, i + 2);
            int hex_int = Integer.parseUnsignedInt(hex_code, 16);
            keyResult += (char) hex_int;
        }
        return URLDecoder.decode(keyResult, "UTF-8");
    }

    public static void main(String[] args) throws UnsupportedEncodingException {
        String map_key = "2c73354461624d717c67627d374e55266761566a42316c613a2d61622c6b28436f403d7d417036607858212d685b374a403873503857302649627277727d7e27253242247d374829337634747320287f673e64665b456d47336f32253242266c615934566c3d662f3f796640317d2c4945624236507a7b5d575f39382862553e55693d6e5d6f4e21343b36687f29747e7529572f6627247e405e4b497a712d594338296b3a7a5e3223375b532a39792a5c772c40543c4c586e487e464c75526a652231692e71754237247e262a217a";
        String data = "24095b4c04034d0a492227285c1c2411570119396945093a522b21591231703f51472c031316131c364f4a451856294852177c1c12414d1e065f0507132d0c26560e534a470d29315537095c074e5e182e28501c49282403235718121a3c323e585949031d563408580f3c0e2f407c5357091a48151f14481f470746411f213f2a2832194c382659480a5b1b165a42563e324b58184b141f4d21315d2d390f29362e2d14370b044350086619142352451f474b40324412542100032c101d2f0a1c562b3447060037222a500d045b4c00034d2340220e255c1c2011572810394048093a562b21701b31593251472803133f1a1c1f424a451c5629615b1755111241491e06760c073a200c26520e53634e0d003c55370d5c076757180725501c4d28242a2a57311f1a3c363e58704003345b34085c0f3c272640555e57091e4815361d48364a0746451f211623281b144c3822594823521b3f5742563a324b71114b3d124d21355d2d1006291f232d14330b046a59084f14142356451f6e42401b49125425000305191d06071c562f34472f09370b245a5b005b4c290a4d0a4d220e215c1c091857011d39404c093a7f222159163159365147010a1316171c1f464a45355f29485617551512416017065f01073a240c267b07534a430d003855372455074e5a180721501c642124032757311b1a3c1f3758594d03345f340875063c0e2b40555a57093741151f1048364e07466c16213f2e281b104c380b50480a5f1b3f534256133b4b581c4b3d164d211c540b390b291f272d141a02044354084f1014237f4c1f474f401b4d12540c09032c141d06031c56063d470604370b23500d29524c00074d0a49220e08551c2015570119394065003a562f21591231591f584728071316131c1f6f43451c51231e5217553c1b41491a065f05073a020526520a534a44074c115c370d5b0d175d125508591c4d2c240323573132131a363a5859490334763d2e5c0b3c0e2f4055735e091e4c151f144836670e46451b213f2a281b394538225d480a5b1b3f7a4b563a364b58184b3d3f442135592d390f291f0e2414330f044350084f391d2356411f474b401b641b542504032c101d062a15562f334d51033d220a590d005c4659034d0a602b0e21581c201157013030664c0d3a562b21593b387f365547280313163a1539464e451c5629487b1e55151641491e065f2c0e3a240826520e534a6e04003851370d5c074e77110721541c4d2824030a5e311b1e3c363e5859600a125f30085c0f3c0e0649555a53091e4b1f303241364e0346451c2b6703211b104b32755a422472123f53455c6d324b5831423d164921355d2d39262039272914330b04436101662b102356451f4762493d4d16542500032c21142f5218562f344706293e0b23540d005b4c002a440a49260e215c1c20385e01193d404c093a56022859123559365147282a1a3013181f464a451c7f206e52135515124149380f5f0500307d0c2652275a4a470a0a6f55370d7a0e4e5e1f0d765316430e2d032353311b19362417517f4907345f34085c2635282f44555a57091e611c39144c364e0746453628192a2c1b104c382270410a5b1f3f5342563a1b4258184f3d164d21357424390f2d1f272d1433220d43500c4f101423566c16614b441b4d125425310a05411906031c562f1d4e2000330b23500d007d4500034a001e220e21751506115301193a4d4a38335510255912325430784e0e031716131c1f467b4c35072d48521755153b486f1e025f05073a243d2f7b5f574a470d00387c3e0d5c034e5e18072179154d2820032357311b3335363e5c594903345f1d015c0f380e2f40555a7e003848111f1448364e2e4f631f253f2a281b10653104594c0a5b1b3f536b5f1c324f58184b3d166428135d29390f291f27041d150b004350084f103d2a70451b474b401b4d3b5d0300072c101d0603355f0934430600370b237904265b4800034d0a491307086718201157011910494c093e562b215912185036514328031316133516464a411c562948523e5c151245491e065f0536330d5d22520e534a4724091e55330d5c074e5e290e0801184d282403237e383d1a38363e585949323d76650c5c0f3c0e2f695c7c570d1e48151f14793f675642451f213f2a0112364c3c2259480a5b2a367a13523a324b58186234304d25355d2d390f0016272d10330b044350214610142756451f474b69124d12502500032c10340f031c522f344706001e02235009005b4c000364036f220a215c1c20117e083f39444c093a562b085034315d36514728033a1f351c1b464a451c560041741751151241491e2f5623073e240c26520e7a43610d043855370d5c2e4778180321501c4d280d0a0557351b1a3c363e71504903305f34085c0f15072f40515a57091e483c161448324e0746451f08362a281f104c38225961035b1b3b5342563a326251184b39164d21355d1c3026781b272d14330b2d4a76084b10142356452e4e62111f4d125425003225132602031c55251c760f03660f23500d005b6509254d0e49220e215c2d293806051939404c09135f0d215d123159365176212a4212131c1f464a6c1556294c521755151268401e065b05073a240c0f5b0e534e470d0038551e045c074a5e180721503a442824072357321116153f18585d4903345f342155293c0a2f40555a5720176e151b1448364e076f4c1f213b2a281b104c112b59480e5b1b3c59657033324b5c184b3e1c54083c7b2d3d0f291f272d3d3a2d044750084f10140a5f631f434b401b4d12722c000328101d050e1f7f2634470200370b235024095b4c04034d0a492227285c1c24115701193969452f3a522b21591231703f77472c031316131c364f6c45185629485217641c3b104d1e065f0507132d0c26560e534a470d293155370a565e4d542e2e28501c4a227303235718121a3c323e585949031d561208580f3c0e2f4064537e581a48151f14481f470746411f213f2a2832194c382659480a5b1b165a42563e324b58184b141f4d21315d2d390f29392e2d14370b04405a366619322352451f474b40324434542100032c101d2f0a3a562b3447060037222a500d045b4c00034d2340220e255c1c2011572810394048093a562b21701b31593251472803133f1a1c1f424a451c5629615b3155111241491e066e0c2e01200c26520e53634e0d003c55370d5c076757180725501c4d28242a2a57311f1a3c363e587f4003345b34085c0f3c282640555e57091d4226361d6e364a0746451f210e23014a144c3822594823521b3f5742563a324b71114b3d124d21355d2d1006291f232d14330b046a59084f14142356451f6e42401b4912542500031d193457071c562f34472f09110b27500d005b4c290a4d0a4d220e215c1c091857011d39404c093a7f222159163159365147010a3516171c1f45406c3a5f2948551d0c16186f6017205f01073a240c267b07754a430d003855372455074e5a180721501c642124032757311b1a3c1f3758594d03345f340875063c0e2b40555a57093741151f1048364e0746741622042e281b104c380b506e0a5f1b3f534256133b6d581c4b3d164d211c542d390b291f272d141a02044354084f1319247f4c1f474f401b4d12540c09252c141d06031c56063d610604370b23500d31526551074d0a49220e07551c201557011a335365003a562f21591231591f584728071316131c1f6f43451c5229485217553c1b41491a065f05073a0d0526520a534a470d00115c110d58074e5e18071059351c2c240323573132133c363a5859490334763d085c0836572f4055735e091e4c151f144836670e6045182b662a281b39451e225d480a5b1b3f7a4b703a364b58184b3d3f442135592d390f291f0e2414330f044350084f391d2356411f474b401b641b542504032c101d062a15562f30470600370b0a590d005f4c00034d0a602b2821581c201157013030664c0d3a562b21593b3859365547280313163a151f464e451c562948741e55151641491d0c4f2c0e3a240826520e534a6e04263851370d5c074e6f112e70541c4d2824030a5e311b1e3c363d520d600a345f30085c0f3c0e0649555a53091e48151f3d41364e0346451f213f03211b1048382259480a7d123f5346563a324b5831421b164921355d2d393e2036762914330b044379016910102356451f476d491b4d165425030e29361406031b5c76344706293e0b23540d005b4c002a442c49260e215c1c20385e27193d404c093a561a2870293559365147282a1a1613181f464a451c7f204852135515114b66370f5f05033a240c2652275a4a4709003855370d750e4e5e1c0721501c4d012d252353311b1a3c3617517f4907345f34085c2635282f44555a57091e611c39144c364e07464536283f2a2c1b104c38227f410a5b1f3f5342563a1b4258184f3d164d21356c24105e2d1f272d1433220d65500c4f101423566316474b47111a115e37290a2c101a0c5a1b5c1c1d4e0600330b2353072a72450003490a49220e217a1520115301193a4a592033702b255912315936604e01521716131c1f46634c3a562d48521755152348604f025f05073a24252f740e574a470d00387c3e0d5c034e5e18072179154d28200323543b4f3335363e5c594903345f1d017a0f380e2f40555a7e003848111f1448364e214f451f253f2a2b1107653122594f000c1b3f536b5f3a324f58184b3d166428355d29390f291f27041d150b004350084f103d2a70451b474b401b4d3b5d0300072c101d0603355f0934430600370b237904265b4800034d0a490b07075c18201157011910494c093e562b225335185036514328031316133516464a411c56294852265c3c4345491e065f052e33020c22520e534a4724091e5530070b074e5e310e2150184d2824032371381b1a38363e5859492a3d79340c5c0f3c0e2f715c73060d1e48151f146e3f4e0742451f213f2a1912391d3c2259480a5b32367542523a324b58187a343f1c25355d2d390f0016272d10330b04435021461014245c1c1f474b66124d12532f560021122c0f0027522f344706001e02055009005b4c000364036f220a215c1c20117e083f39444c093a562b085012315d36514728033a1f351c1b464a451c560041741751151241491e205605073d2e5b26520e7543470d043855370d5c2e4778180321501c4d280d0a0557351b1a3c363e71504903305f34085c0f15072f40515a57091e483c161448324e0746451f08362a281f104c38225961037d1b3b5342563a327a51311a39164d21355d043029291b272d14330b354a79594b1014235645364e6d401f4d125425003225394c02031c562f34610f00370c29070e0a686a09034d0e49220d2b5035291157051939404c090b5f02705d12315936516e21031312131c1f464a6c1556294c521755151268401e065b05073a240c0f5b0e534e470d0038551e047a074a5e1807215035440e24072357311b1a153f18585d4903345f342155293c0a2f40555a5720176e151b1448364e076f4c39213b2a281b104c1e2b59480d514c3c594d7033324b5c184b3e1c7b073c5d2d3d0f291c2d043d3a0b044750084f10140a5f451f434b401b4d127d2c000328101d06031c7f2634470200370b235024095b4c04034d0a492227287a1c2411570119397145206b522b21591231683f527c2c031316131c2e4f63141856294852177c1c34414d1e065f05070b2d2577560e534a470d293155370a56504d531e2e28501c4a227303235717121a3c31340f5a43291d5634085b05650e2f407c5357091a48151f14481f470746411f213f2a2832194c382659480a5b1b165a42563e324b58184b141f6b21315d2d390f29362e0b14370b044350086619142352451f474b40324412542100032c101d2f0a3a562b3447060037222a760d045b4c00034d2340220e255c1c2011572810394048093a562b21701b31593251472803133f1a1c1f424a451c5629615b1755111241491e06760c073a200c26520e53634e0d003c55370d5c076757180725501c4d28242a2a57311f1a3c363e5868402a655b34085c0f3c272640555e57091e4815361d48364a0746451f211623281b144c382259483b52326e5742563a324b71114b3d124d213657151006291f232d143001206a59084f171e7456451f6e42401b4a18032500030a191d06071c562c39452f09370b27500d005b4c290a4d0a4d220e215c1c091857011d39404c093a7f222159163159365147010a3516171c1f464a45355f29485617551512416017065f01073a240c267b07534a430d003855372455074e5a180721501c642124032757311b1a3c1f3758594e096d5f340875063c0e2b40555a57093741151f1048364e07466c16213f2e281b104c380b50480a5f1b3f5342561c3b4b581c4b3d1547301c542d390b291f272d141a02044354084f101423704c1f474f401b4e18440c09032c141d06031c56063d470604370b23500d29524c00074d0a49220e08551c2015570119394065003a562c2b0f1231591f584728071316131c1f6f43451c5229485217553c1b41491a065f05073a0d05265209591c470d00115c370d58074e5e180708591c4d2c240323573132133c363a5859490334763d085c0b3c0e2f4055735e091e4c151f17453a";

        System.out.println(decypterData(data, map_key));;

    }


le code est fonctionnel
 
Inscrit
5 Novembre 2016
Messages
56
Reactions
2
#5
bonjour,

je te rajoute quelques fonction dev en JAVA, ca peut t'aider ou pourrait aider d'autres personnes

Java:
public final static String[] HEX_CHARS = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F"};
    public final static String ZKARRAY = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_";


public static Cell uncompressCell(String cData) {
        Cell cell = new Cell();
        int curseur = cData.length() - 1;
        int[] data = new int[5000];
        while (curseur >= 0) {
            data[curseur] = ZKARRAY.indexOf(cData.charAt(curseur));
            curseur--;
        }

        int mouvement = (data[2] & 56) >> 3;
        int layerObject2Num = ((data[0] & 2) << 12) + ((data[7] & 1) << 12) + (data[8] << 6) + data[9];
        int layerObject2Interactive = ((data[7] & 2) >> 1);
       // attribuer ces données à l'objet Cell

        return cell;
    }

    public static void main(String[] args) throws UnsupportedEncodingException {
        String map_key = "2c73354461624d717c67627d374e55266761566a42316c613a2d61622c6b28436f403d7d417036607858212d685b374a403873503857302649627277727d7e27253242247d374829337634747320287f673e64665b456d47336f32253242266c615934566c3d662f3f796640317d2c4945624236507a7b5d575f39382862553e55693d6e5d6f4e21343b36687f29747e7529572f6627247e405e4b497a712d594338296b3a7a5e3223375b532a39792a5c772c40543c4c586e487e464c75526a652231692e71754237247e262a217a";
        String data = "24095b4c04034d0a492227285c1c2411570119396945093a522b21591231703f51472c031316131c364f4a451856294852177c1c12414d1e065f0507132d0c26560e534a470d29315537095c074e5e182e28501c49282403235718121a3c323e585949031d563408580f3c0e2f407c5357091a48151f14481f470746411f213f2a2832194c382659480a5b1b165a42563e324b58184b141f4d21315d2d390f29362e2d14370b044350086619142352451f474b40324412542100032c101d2f0a1c562b3447060037222a500d045b4c00034d2340220e255c1c2011572810394048093a562b21701b31593251472803133f1a1c1f424a451c5629615b1755111241491e06760c073a200c26520e53634e0d003c55370d5c076757180725501c4d28242a2a57311f1a3c363e58704003345b34085c0f3c272640555e57091e4815361d48364a0746451f211623281b144c3822594823521b3f5742563a324b71114b3d124d21355d2d1006291f232d14330b046a59084f14142356451f6e42401b49125425000305191d06071c562f34472f09370b245a5b005b4c290a4d0a4d220e215c1c091857011d39404c093a7f222159163159365147010a1316171c1f464a45355f29485617551512416017065f01073a240c267b07534a430d003855372455074e5a180721501c642124032757311b1a3c1f3758594d03345f340875063c0e2b40555a57093741151f1048364e07466c16213f2e281b104c380b50480a5f1b3f534256133b4b581c4b3d164d211c540b390b291f272d141a02044354084f1014237f4c1f474f401b4d12540c09032c141d06031c56063d470604370b23500d29524c00074d0a49220e08551c2015570119394065003a562f21591231591f584728071316131c1f6f43451c51231e5217553c1b41491a065f05073a020526520a534a44074c115c370d5b0d175d125508591c4d2c240323573132131a363a5859490334763d2e5c0b3c0e2f4055735e091e4c151f144836670e46451b213f2a281b394538225d480a5b1b3f7a4b563a364b58184b3d3f442135592d390f291f0e2414330f044350084f391d2356411f474b401b641b542504032c101d062a15562f334d51033d220a590d005c4659034d0a602b0e21581c201157013030664c0d3a562b21593b387f365547280313163a1539464e451c5629487b1e55151641491e065f2c0e3a240826520e534a6e04003851370d5c074e77110721541c4d2824030a5e311b1e3c363e5859600a125f30085c0f3c0e0649555a53091e4b1f303241364e0346451c2b6703211b104b32755a422472123f53455c6d324b5831423d164921355d2d39262039272914330b04436101662b102356451f4762493d4d16542500032c21142f5218562f344706293e0b23540d005b4c002a440a49260e215c1c20385e01193d404c093a56022859123559365147282a1a3013181f464a451c7f206e52135515124149380f5f0500307d0c2652275a4a470a0a6f55370d7a0e4e5e1f0d765316430e2d032353311b19362417517f4907345f34085c2635282f44555a57091e611c39144c364e0746453628192a2c1b104c382270410a5b1f3f5342563a1b4258184f3d164d21357424390f2d1f272d1433220d43500c4f101423566c16614b441b4d125425310a05411906031c562f1d4e2000330b23500d007d4500034a001e220e21751506115301193a4d4a38335510255912325430784e0e031716131c1f467b4c35072d48521755153b486f1e025f05073a243d2f7b5f574a470d00387c3e0d5c034e5e18072179154d2820032357311b3335363e5c594903345f1d015c0f380e2f40555a7e003848111f1448364e2e4f631f253f2a281b10653104594c0a5b1b3f536b5f1c324f58184b3d166428135d29390f291f27041d150b004350084f103d2a70451b474b401b4d3b5d0300072c101d0603355f0934430600370b237904265b4800034d0a491307086718201157011910494c093e562b215912185036514328031316133516464a411c562948523e5c151245491e065f0536330d5d22520e534a4724091e55330d5c074e5e290e0801184d282403237e383d1a38363e585949323d76650c5c0f3c0e2f695c7c570d1e48151f14793f675642451f213f2a0112364c3c2259480a5b2a367a13523a324b58186234304d25355d2d390f0016272d10330b044350214610142756451f474b69124d12502500032c10340f031c522f344706001e02235009005b4c000364036f220a215c1c20117e083f39444c093a562b085034315d36514728033a1f351c1b464a451c560041741751151241491e2f5623073e240c26520e7a43610d043855370d5c2e4778180321501c4d280d0a0557351b1a3c363e71504903305f34085c0f15072f40515a57091e483c161448324e0746451f08362a281f104c38225961035b1b3b5342563a326251184b39164d21355d1c3026781b272d14330b2d4a76084b10142356452e4e62111f4d125425003225132602031c55251c760f03660f23500d005b6509254d0e49220e215c2d293806051939404c09135f0d215d123159365176212a4212131c1f464a6c1556294c521755151268401e065b05073a240c0f5b0e534e470d0038551e045c074a5e180721503a442824072357321116153f18585d4903345f342155293c0a2f40555a5720176e151b1448364e076f4c1f213b2a281b104c112b59480e5b1b3c59657033324b5c184b3e1c54083c7b2d3d0f291f272d3d3a2d044750084f10140a5f631f434b401b4d12722c000328101d050e1f7f2634470200370b235024095b4c04034d0a492227285c1c24115701193969452f3a522b21591231703f77472c031316131c364f6c45185629485217641c3b104d1e065f0507132d0c26560e534a470d293155370a565e4d542e2e28501c4a227303235718121a3c323e585949031d561208580f3c0e2f4064537e581a48151f14481f470746411f213f2a2832194c382659480a5b1b165a42563e324b58184b141f4d21315d2d390f29392e2d14370b04405a366619322352451f474b40324434542100032c101d2f0a3a562b3447060037222a500d045b4c00034d2340220e255c1c2011572810394048093a562b21701b31593251472803133f1a1c1f424a451c5629615b3155111241491e066e0c2e01200c26520e53634e0d003c55370d5c076757180725501c4d28242a2a57311f1a3c363e587f4003345b34085c0f3c282640555e57091d4226361d6e364a0746451f210e23014a144c3822594823521b3f5742563a324b71114b3d124d21355d2d1006291f232d14330b046a59084f14142356451f6e42401b4912542500031d193457071c562f34472f09110b27500d005b4c290a4d0a4d220e215c1c091857011d39404c093a7f222159163159365147010a3516171c1f45406c3a5f2948551d0c16186f6017205f01073a240c267b07754a430d003855372455074e5a180721501c642124032757311b1a3c1f3758594d03345f340875063c0e2b40555a57093741151f1048364e0746741622042e281b104c380b506e0a5f1b3f534256133b6d581c4b3d164d211c542d390b291f272d141a02044354084f1319247f4c1f474f401b4d12540c09252c141d06031c56063d610604370b23500d31526551074d0a49220e07551c201557011a335365003a562f21591231591f584728071316131c1f6f43451c5229485217553c1b41491a065f05073a0d0526520a534a470d00115c110d58074e5e18071059351c2c240323573132133c363a5859490334763d085c0836572f4055735e091e4c151f144836670e6045182b662a281b39451e225d480a5b1b3f7a4b703a364b58184b3d3f442135592d390f291f0e2414330f044350084f391d2356411f474b401b641b542504032c101d062a15562f30470600370b0a590d005f4c00034d0a602b2821581c201157013030664c0d3a562b21593b3859365547280313163a151f464e451c562948741e55151641491d0c4f2c0e3a240826520e534a6e04263851370d5c074e6f112e70541c4d2824030a5e311b1e3c363d520d600a345f30085c0f3c0e0649555a53091e48151f3d41364e0346451f213f03211b1048382259480a7d123f5346563a324b5831421b164921355d2d393e2036762914330b044379016910102356451f476d491b4d165425030e29361406031b5c76344706293e0b23540d005b4c002a442c49260e215c1c20385e27193d404c093a561a2870293559365147282a1a1613181f464a451c7f204852135515114b66370f5f05033a240c2652275a4a4709003855370d750e4e5e1c0721501c4d012d252353311b1a3c3617517f4907345f34085c2635282f44555a57091e611c39144c364e07464536283f2a2c1b104c38227f410a5b1f3f5342563a1b4258184f3d164d21356c24105e2d1f272d1433220d65500c4f101423566316474b47111a115e37290a2c101a0c5a1b5c1c1d4e0600330b2353072a72450003490a49220e217a1520115301193a4a592033702b255912315936604e01521716131c1f46634c3a562d48521755152348604f025f05073a24252f740e574a470d00387c3e0d5c034e5e18072179154d28200323543b4f3335363e5c594903345f1d017a0f380e2f40555a7e003848111f1448364e214f451f253f2a2b1107653122594f000c1b3f536b5f3a324f58184b3d166428355d29390f291f27041d150b004350084f103d2a70451b474b401b4d3b5d0300072c101d0603355f0934430600370b237904265b4800034d0a490b07075c18201157011910494c093e562b225335185036514328031316133516464a411c56294852265c3c4345491e065f052e33020c22520e534a4724091e5530070b074e5e310e2150184d2824032371381b1a38363e5859492a3d79340c5c0f3c0e2f715c73060d1e48151f146e3f4e0742451f213f2a1912391d3c2259480a5b32367542523a324b58187a343f1c25355d2d390f0016272d10330b04435021461014245c1c1f474b66124d12532f560021122c0f0027522f344706001e02055009005b4c000364036f220a215c1c20117e083f39444c093a562b085012315d36514728033a1f351c1b464a451c560041741751151241491e205605073d2e5b26520e7543470d043855370d5c2e4778180321501c4d280d0a0557351b1a3c363e71504903305f34085c0f15072f40515a57091e483c161448324e0746451f08362a281f104c38225961037d1b3b5342563a327a51311a39164d21355d043029291b272d14330b354a79594b1014235645364e6d401f4d125425003225394c02031c562f34610f00370c29070e0a686a09034d0e49220d2b5035291157051939404c090b5f02705d12315936516e21031312131c1f464a6c1556294c521755151268401e065b05073a240c0f5b0e534e470d0038551e047a074a5e1807215035440e24072357311b1a153f18585d4903345f342155293c0a2f40555a5720176e151b1448364e076f4c39213b2a281b104c1e2b59480d514c3c594d7033324b5c184b3e1c7b073c5d2d3d0f291c2d043d3a0b044750084f10140a5f451f434b401b4d127d2c000328101d06031c7f2634470200370b235024095b4c04034d0a492227287a1c2411570119397145206b522b21591231683f527c2c031316131c2e4f63141856294852177c1c34414d1e065f05070b2d2577560e534a470d293155370a56504d531e2e28501c4a227303235717121a3c31340f5a43291d5634085b05650e2f407c5357091a48151f14481f470746411f213f2a2832194c382659480a5b1b165a42563e324b58184b141f6b21315d2d390f29362e0b14370b044350086619142352451f474b40324412542100032c101d2f0a3a562b3447060037222a760d045b4c00034d2340220e255c1c2011572810394048093a562b21701b31593251472803133f1a1c1f424a451c5629615b1755111241491e06760c073a200c26520e53634e0d003c55370d5c076757180725501c4d28242a2a57311f1a3c363e5868402a655b34085c0f3c272640555e57091e4815361d48364a0746451f211623281b144c382259483b52326e5742563a324b71114b3d124d213657151006291f232d143001206a59084f171e7456451f6e42401b4a18032500030a191d06071c562c39452f09370b27500d005b4c290a4d0a4d220e215c1c091857011d39404c093a7f222159163159365147010a3516171c1f464a45355f29485617551512416017065f01073a240c267b07534a430d003855372455074e5a180721501c642124032757311b1a3c1f3758594e096d5f340875063c0e2b40555a57093741151f1048364e07466c16213f2e281b104c380b50480a5f1b3f5342561c3b4b581c4b3d1547301c542d390b291f272d141a02044354084f101423704c1f474f401b4e18440c09032c141d06031c56063d470604370b23500d29524c00074d0a49220e08551c2015570119394065003a562c2b0f1231591f584728071316131c1f6f43451c5229485217553c1b41491a065f05073a0d05265209591c470d00115c370d58074e5e180708591c4d2c240323573132133c363a5859490334763d085c0b3c0e2f4055735e091e4c151f17453a";

        String decrypted_map = decypterData(data, map_key);

        Cell[] cells = new Cell[1024];
        int index = -1;

        for (int i = 0; i < decrypted_map.length(); i = i + 10) {
            String cell = decrypted_map.substring(i, i + 10);
            index++;

            cells[index] = uncompressCell(cell);

        }

    }
 
Haut Bas