Строки из DynamoDB, которые изначально были байтовыми массивами, имеют прикольные значения

Теперь я не уверен, что я делаю что-то не так или что-то происходит в DynamoDB.

По сути, я создаю простую систему регистрации / входа в систему для своего проекта, сохраняя данные пользователя / пароль в экземпляре DynamoDB с паролем, хэшированным с использованием RIPEMD160, а также с солью, используя C#. RNGCryptoServiceProvider(),

Регистрация, кажется, работает отлично. проблема заключается в входе в систему, несмотря ни на что, пароли не совпадают, и я думаю, что это потому, что я получаю несколько прикольных символов при извлечении хеша / соли обратно из DynamoDB. Прежде всего, и хеш, и соль являются байтовыми массивами длиной 20 и преобразуются в строки перед сохранением в базе данных.

Эти примеры копируются / вставляются из веб-интерфейса Dynamo

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

Когда они возвращаются, и я отлаживаю функцию, которая возвращает данные из динамо, обе строки имеют разные символы (отладчик VS2010):

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

Кажется, эти u001B, u000B, u001D, u0012, u0003, u001C и u0001 пробираются в возвращаемые данные, и я не совсем уверен, что происходит?

1 ответ

Решение

Вы не должны пытаться преобразовать непрозрачные двоичные данные в строку таким образом. Они не текстовые, поэтому не относитесь к ним так. Вы просто умоляете потерять информацию таким образом.

использование Convert.ToBase64String(data) вместо Encoding.GetString перед помещением данных в базу данных. Когда вы получите его снова, используйте Convert.FromBase64String чтобы получить исходные двоичные данные.

В качестве альтернативы, не храните данные в текстовом поле для начала - используйте тип поля базы данных, который предназначен для хранения двоичных данных...

Другие вопросы по тегам