私はC#とMSSQLを使用していますが、ご想像のとおり、パスワードはソルトおよびハッシュされて保存されています。
nvarchar列に格納されているハッシュを見ると(たとえば、すぐに使用できるaspnetメンバーシッププロバイダー)。生成されたSaltとHashの値が常に1つまたは2つの等号で終わるように見えるのは、常に興味がありました。
暗号化アルゴリズムを使用しているときに似たようなものを見てきましたが、これは偶然ですか、それとも理由がありますか?
19
余談ですが、Base64でエンコードされたバイナリデータをNVARCHARフィールドに格納する場合、6倍のストレージの無駄を嘆きます。たとえば、Base64にはASCIIの下半分の64文字しか含めることができません(したがって、半分を保存するのにVARCHARのみが必要です)。2つの場合、Base64はデータの各バイトを1〜4文字に分解します。SQL Serverには既に、VARBINARY型があり、エンコードによる肥大化なしにハッシュを保存でき、比較では照合を気にしません... :-)
—
jimbobmcgee 14年
@WillieWheeler、ハッシュはなんとかして保存する必要があります。Base64は完璧なストレージメディアではないかもしれませんが、本質的に問題はありません。
—
ブライアンS 14年
hash("my password")
配列[1,2,3,4,5]
を作成し、それらの値をデータベースに保存する必要がある場合、文字列を保存するよりも悪い選択肢がありますAQIDBAU=
(もちろん、使用中のハッシュ関数が既に文字列を作成している場合、Base64でエンコードするのは少しばかげているようです。 )
@WillieWheelerあなたがポイントを逃していると思います。ブライアンSが書いたものを再読してください-彼はハッシュのためのbase64のプロパティについて話していませんでした-それはばかばかしいbase64はハッシュアルゴリズムではありません。彼は、ハッシュ(ハッシュ関数/アルゴリズムによって生成された)をbase64形式で保存しても何も問題はないと言っています。
—
アンドリューサビニク14年
OPは、彼がハッシュを保存し、等号で終わると言います。それは、彼がハッシュとBase64エンコーディングを混同していることを示唆しています。もちろん、base64でハッシュをエンコードしても問題ない場合はもちろんですが、それは何と関係がありますか?
—
ウィリーウィーラー14年
ええ、私は最終的に何が起こっているのかを認識しました。SSHの公開鍵と秘密鍵のファイルを調べてみると、末尾に= / ==が付いていることに気付きました。これらは、BrianSやzespriが記述するようなバイト配列のbase64エンコードです。みんなありがとう。
—
ウィリーウィーラー14年