0

これが私が間違っていることなのか、DynamoDBで起こっていることなのかはわかりません..

基本的に、私のプロジェクト用の簡単な登録/ログイン システムを構築し、ユーザーデータ/パスワードを DynamoDB インスタンスに保存し、パスワードを RIPEMD160 を使用してハッシュし、C# を使用してソルト化しますRNGCryptoServiceProvider()

登録は完全にうまくいくようです。問題はログイン時で、何があってもパスワードが一致しません。DynamoDB からハッシュ/ソルトを引き戻すときにファンキーな文字が戻ってくるためだと思います。まず、ハッシュとソルトの両方が長さ 20 のバイト配列であり、データベースに保存される前に文字列に変換されます。

これらの例は、dynamo Web インターフェイスからコピーして貼り付けたものです。

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

それらが戻ってきて、dynamo からデータをプルバックする関数をデバッグすると、両方の文字列に異なる文字が含まれます (VS2010 デバッガー):

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

これらの u001B、u000B、u001D、u0012、u0003、u001C、および u0001 が返されたデータに忍び込んでいるようですが、何が起こっているのか完全にはわかりません。

4

1 に答える 1

1

そもそも、不透明なバイナリ データをこの方法で文字列に変換しようとするべきではありません。それらはテキストではないので、そのように扱わないでください。あなたはそのように情報を失うことを懇願しているだけです.

データをデータベースに入れる前のConvert.ToBase64String(data)代わりに使用します。Encoding.GetString再度取り出したら、 を使用Convert.FromBase64Stringして元のバイナリ データを取得します。

または、最初からテキスト フィールドにデータを格納しないでください。バイナリ データを格納するためのデータベース フィールド タイプを使用してください

于 2012-06-26T21:29:00.613 に答える