2012-06-26 2 views
0

Maintenant, je ne sais pas si cela est quelque chose que je fais mal, ou quelque chose qui se passe dans des thats DynamoDB ..chaînes de DynamoDB qui étaient à l'origine des tableaux d'octets ont des valeurs géniales

Fondamentalement, Im la construction d'un simple enregistrement/système de connexion pour mon projet, en enregistrant le userdata/mot de passe dans une instance DynamoDB avec le mot de passe hashed en utilisant RIPEMD160, et salé aussi en utilisant RNGCryptoServiceProvider() de C#.

L'enregistrement semble fonctionner parfaitement. le problème est lors de la connexion, quoi qu'il arrive, les mots de passe ne correspondent pas, et je pense que c'est parce que je récupère des caractères géniaux en retirant le hachage/salt de DynamoDB. Tout d'abord, le hachage et le sel sont des tableaux d'octets de longueur 20, et convertis en chaînes avant d'être sauvegardés dans la base de données.

Ces exemples sont copier/coller à partir de l'interface Web de dynamo

Example Hash: ">�Bb.ŧ�E���d��Ʀ" 
Example Salt: "`���!�!�Hb�m�}e�" 

Quand ils reviennent et je débogage dans la fonction qui retire les données de dynamo, les deux chaînes ont des caractères différents (VS2010 Debugger):

Returned Hash: "u001B>�Bb.ŧ�E��u0003�d�u001C�Ʀ" 
Returned Salt: "`���!u000B�!�Hb�u001Dmu0012�u0001}e�" 

Semble ces u001B, u000B, u001D, u0012, u0003, u001C et U0001 sont faufilant dans les données renvoyées, et je ne suis pas tout à fait sûr ce qui se passe?

Répondre

0

Vous ne devriez pas essayer de convertir des données binaires opaques en une chaîne de cette façon en premier lieu. Ils sont pas le texte alors ne les traitez pas comme ça. Vous ne faites que supplier de perdre des informations de cette façon.

Utilisez Convert.ToBase64String(data) au lieu de Encoding.GetString avant de mettre les données dans la base de données. Lorsque vous le sortez à nouveau, utilisez Convert.FromBase64String pour récupérer les données binaires d'origine.

Sinon, ne pas stocker les données dans un champ de texte pour commencer - utiliser un type de champ de base de données qui est signifie pour stocker des données binaires ...

+2

En ce qui concerne la dernière note, DynamoDB d'Amazon a text/Numéro/ensembles de ces attributs seulement. il n'avait pas le choix. –

+0

L'utilisation de convert pour transformer les données brutes en chaîne Base64, puis en les stockant dans une ligne dynamo sous forme de chaîne, puis en utilisant convert pour les réactiver est une bonne solution au fait que dynamo ne prend pas en charge un type binaire. – sungiant

Questions connexes