2017-11-25 3 views
2

I String-Wert Schlüssel:Wie String zurück in C# erhalten, nachdem in SQL Server, um binäre Umwandlung

TxtProductKey.Text has value "key" 

Encode diesen Wert

byte[] Key = Encoding.ASCII.GetBytes(TxtProductKey.Text.Trim()); 

speichert es in Datenbanktabelle in einer Spalte von Datentyp binary(50) null.

Der Wert in der Tabelle sieht wie folgt aus:

0x6B00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 

Jetzt ist es Ich versuche, in String-Wert zurück zu bekommen, die ich eingegeben Key

byte [] TempKey = (byte[])LicenseInfo.Tables[0].Rows[0]["ProductKey"]; 
var newText = Encoding.ASCII.GetString(TempKey); 

ist aber das Ergebnis, das ich in immer bin newText ist:

k\0\0\0\0\0\00\ 

Wo bin ich doin g etwas falsch? Ich hoffe auf Ihre Vorschläge

C# -Code für Wert in der Datenbank zu speichern:

Sqlconnection.Open(); 

SqlCommand Cmd = new SqlCommand("SpAddAttempts", Sqlconnection); 
Cmd.CommandType = CommandType.StoredProcedure; 
Cmd.Parameters.Add("@Attempts", SqlDbType.Int).Value = Attempt; 
Cmd.Parameters.Add("@Activate", SqlDbType.Bit).Value = Activate; 
Cmd.Parameters.Add("@Key", SqlDbType.Binary).Value = Key; 

Cmd.ExecuteNonQuery(); 
CloseConnection(); 

Stored Procedure ist:

ALTER PROCEDURE [dbo].[SpAddAttempts] 
    @Attempts INT, 
    @Activate BIT, 
    @Key BINARY 
AS 
BEGIN 
    UPDATE License 
    SET Attempts = @Attempts, 
     Activate = @Activate, 
     ProductKey = @Key 
    WHERE LicenseId = '1' 
END 
+0

Sie sparen es nicht richtig. Die Daten haben nur ein Nicht-Null-Byte, es sollte drei Bytes haben (d. H. '0x6B657900 ...') – dasblinkenlight

+0

Sie können das tun, können Sie in Debug sehen, was ist der Wert des Key-Byte-Arrays? Bevor es in die DB geht. Das Beispiel zeigt nur ein Zeichen in der db Binärdaten – farbiondriven

+0

@dasblinkenlight Können Sie mir Fehler zeigen? Mein Sicherheitscode ist in meinem Post vorhanden. – john

Antwort

2

Ich glaube nicht, können Sie: Sie nur ein einziges Byte gespeichert (das Äquivalent von char k) in Ihrer db-Tabelle .. 0x68 ist k, das nächste Byte ist 0x00 - ASCII Null - Zeichenfolge Terminator - was auch immer Ihre Sprache der Wahl wird darauf verweisen, es ist definitiv nicht e

Also, weil nur das erste Byte erhalten geblieben ist und der Rest ist ASCII NUL 000000000000000000000000 ....), gibt es keine Möglichkeit zu wissen, ob der Rest des Wertes war ey, eyboard, oolaid etc .. Der Fehler ist während das Speichern des Wertes in der Tabelle (Sie haben keinen Code für diesen Teil angezeigt) - es wird nur das erste Byte gespeichert

Ich empfehle Ihnen, diesen Text als Text zu speichern, nicht binär; es scheint wie eine unnötige Welt des Schmerzes, um es als binär zu speichern, wenn es Leben als Text anfängt, und Sie wollen es offenbar wieder als Text.

EDIT: Jetzt haben Sie den Code, der das Speichern tut, kann ich sehen, yeeve deklariert den Parameter als Typ Binary, aber Sie haben keine Länge angegeben, so dass die Länge standardmäßig auf 1 Byte. Aus diesem Grund wird nur eines Ihrer Bytes gespeichert. Sie müssen den Parameter mehr wie folgt deklarieren:

cmd.Parameters.Add("@Key", SqlDbType.Binary, binaryData.Length); //dont pass an array longer than what the table can store, or you'll get a "data would be truncated" error 
+1

Ich gebe "Schlüssel" zum Speichern ein und Grund für die Verschlüsselung ist es zu sichern, sonst ist es einfach, Text direkt zu speichern. Vielleicht mache ich einen Fehler, so dass es nur "k" Wert von "Schlüssel" speichert. – john

+0

Oh yeah, es in binäre konvertieren, macht es wirklich sicher, wenn es ein paar extra Tastenanschläge ist, um es in https://www.branah.com/ascii-converter einzufügen und das Original ascii zurück zu bekommen. ROT13'd Text wäre schwieriger zu knacken (lies: Nimm dir ein paar Sekunden länger um zu erkennen, dass das der Sicherheitsmechanismus war). Entweder implementieren Sie eine richtige Sicherheitslösung, oder speichern Sie es als Text und überprüfen Sie Ihre "wer hat das SQL-Server-Passwort" -Politik :) –

+0

bro Sie scheint professioneller zu sein Ich bin neu, so habe nicht viele Informationen, aber danke für mehr Informationen :) Ich habe Post bearbeitet jetzt kannst du Code zum Speichern von Daten finden. – john

Verwandte Themen