Строки из 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
чтобы получить исходные двоичные данные.
В качестве альтернативы, не храните данные в текстовом поле для начала - используйте тип поля базы данных, который предназначен для хранения двоичных данных...