2010-12-27 4 views
2

オンラインの例の多くは、ハッシュを16進表現として示しています。通常は、カスタム実装です。代わりにApache Commons Base64エンコーディングを使用すると、何か問題がありますか?エンコーディングについて読むと、通常はバイナリをXMLでテキストとして表現する方法の範囲内ですが、必ずしも圧縮がどのように機能するかというセキュリティ上の懸念については必ずしも言及していません。SHA-1ハッシュをエンコードするために16進数でBase64を使用すると安全性が低下しますか?

関連する問題では、データベースにバイナリとして暗号化を保持する可能性のあるバイナリタイプがあるため、なぜそれをすべてエンコードするのですか?だから私がパスワードを保管しているのであれば、そのネイティブタイプに保管するだけではいかがですか?

答えて

4

エンコーディングは、データの表現にのみ影響し、セキュリティは影響しません。したがって、暗号化されていないパスワードを送信して何らかの形式のエンコーディングを使用した場合、それをもう安全にすることはできません。同様に、高度に暗号化されたテキストをいくつかのエンコーディングスキームで表現すると、それはあまり安全ではありません。通常、この形式のエンコーディングを使用する理由は、プロトコルが7ビットASCIIテキストのみをサポートできるプロトコル(SMTPなど)を使用してバイナリデータを送信するためです。もう1つの用途はURLであり、URLがサポートできる文字セットは限られていますが、任意の複雑なバイナリデータをそのURLに入れることもできます(ある種の検証署名など)。

1

私たちは通常、バイナリをよく読んでいませんし、16進数はそれに代わるものです。私はあなたが参照していた記事にリンクしていればいいと思っています。 〜);

私ははなぜ彼らは六角上のBase64を使用し理解していないが、私は進が16桁で、Base64では、このように実際のハッシュのよりコンパクトなバージョンを生成、さらにいくつかあるからだと仮定しています人間は、一度に少量のデータを吸収する傾向があります。

1

Base64は1:1エンコーディングであるため(つまり、入力ごとに1つのbase64エンコードされた出力があり、その逆もあります)、SHA1ハッシュをエンコードするbase64は、エンコードされた(またはバイナリエンコードされた)ハッシュ。

エンコードでは、エンコードによって複数のハッシュが同じ文字列にエンコードされたり、複数の文字列が同じハッシュにデコードされたりする可能性があります。

3

全くありません。これは、ASCIIの同じビットを表すエンコーディングです。テキストのみを処理するように設計された通信パスを介してバイナリデータを格納または送信する必要がある場合には、ほとんどの場合役に立ちます。現代の例では、電子メールとWebインターフェイスが使用されています。また、バイナリ形式をターミナルに送信して表示することもできません。これは、ガベージまたは奇妙な端末動作を引き起こす可能性があるためです。

ビットをデータベースのバイナリBLOBに安全に保存できる場合は、base64でエンコードする必要はありません。しかし、あなたがそれを見ないと、それを見るのが難しくなります。最初にテキスト形式に戻す必要があります。

関連する問題