2017-10-07 36 views
0

Donc, je veux faire une fonction qui peut chiffrer et déchiffrer en Base64, puis XOR avec une clé.VB.net Base64 + XOR

Voici mon code à ce jour:

Imports System.Text 

    Module Module1 

    Private key As String = "37526" 


    Sub Main() 
     Dim test As String = Console.ReadLine 
     test = Decrypt(test) 
     Console.WriteLine(test) 
     Main() 

    End Sub 

    Public Function Decrypt(CipherText As String) As String 

     Dim decoded = Convert.FromBase64String(CipherText) 
     Dim dexored = [xor](decoded, key) 
     Return Encoding.UTF8.GetString(dexored) 

    End Function 

    Private Function [xor](text As Byte(), key As String) As Byte() 
     Dim res As Byte() = New Byte(text.Length - 1) {} 
     For c As Integer = 0 To text.Length - 1 
      res(c) = CByte((text(c)) Xor CUInt(Val(c Mod key.Length))) 
     Next 

     Return res 
    End Function 


    Public Function Encrypt(Plaintext As String) 

     Dim encoded = Encoding.UTF8.GetBytes(Plaintext) 
     Dim xored = [xor](encoded, key) 
     Return Convert.ToBase64String(xored) 

    End Function 

End Module 

Alors, voici mon problème: ce code fonctionne très bien, mais je suis en train de déchiffrer cette chaîne « X1hZXVoCBQY = », le décryptage de cette chaîne doit être « lolol123 ". Je ne sais pas si mon code est erroné ou si la clé est incorrecte. Quelqu'un pourrait-il vérifier mon code ou me donner la bonne clé? J'ai essayé de renforcer la clé, mais ça ne marche pas pour moi. Si j'essaye de décrypter la chaîne je ne reçois pas "lolol123", j'obtiens "_Y [^^"

+0

Base64 n'est pas un chiffrement. XORing quelque chose n'est pas le cryptage - c'est obfuscation au mieux – Plutonix

+0

@Plutonix, thnkx pour clarifier que – MikeWe

+0

Toujours pas de solution; ( – MikeWe

Répondre

0

Cela ne va pas dans la fonction xor. Essayer d'en faire trop en une ligne peut rendre trop compliqué de voir immédiatement ce qui se passe, alors j'ai commencé à le réécrire plus comme je l'aurais fait et une vérification rapide a montré qu'il fonctionnait avant de commencer à regarder quoi que ce soit sinon:

Option Infer On 
Option Strict On 
' ... 
Private Function [xor](text As Byte(), key As String) As Byte() 
    Dim res As Byte() = New Byte(text.Length - 1) {} 
    Dim keyBytes = Encoding.UTF8.GetBytes(key) 

    For c = 0 To text.Length - 1 
     res(c) = CByte((text(c)) Xor keyBytes(c Mod keyBytes.Length)) 
    Next 

    Return res 

End Function 
+0

Wow man, vous êtes le meilleur! – MikeWe