web-dev-qa-db-ja.com

C#Byte []からURLに適した文字列

私は、作成している単純なサイト用のクイックキャプチャジェネレーターに取り組んでおり、ページのURLで暗号化されたキーを渡すことを望んでいます。私はおそらくこれをクエリ文字列パラメータとして十分に簡単に行うことができますが、私もそうしないことを望んでいます(クエリ文字列から他に何も実行されないという理由だけで)...

私の暗号化コードはbyte []を生成し、それはConvert.ToBase64String(byte [])を使用して文字列に変換されます。ただし、この文字列には「/」や「=」などを含めることができるため、URLに対応しているとは言えません。バイト配列をURLに適した文字列に変換するための.NETFrameworkのより優れた関数を知っている人はいますか?

System.Web.HttpUtility.UrlEncode()とそれに相当するものについてはすべて知っていますが、クエリ文字列パラメーターでのみ正しく機能します。パス内で「=」をURLエンコードすると、Webサーバーは400 BadRequestエラーを返します。

とにかく、重大な問題ではありませんが、誰かが私に素晴らしい解決策を与えることができることを願っています

**編集:文字列で何をしているのかを正確に確認するために、もう少し情報を提供すると思いました。

私の暗号化アルゴリズムから得られたbyte []は、URLに適した文字列にするために、ある種のアルゴリズムを介して供給される必要があります。この後、それはXElementのコンテンツになり、XSLT変換のソースドキュメントとして使用され、アンカーのhref属性の一部として使用されます。パス上を通過するものはエンコードされたクエリ文字列パラメーターのように見えるので、xslt変換が問題を引き起こしているとは思わないが、HTTP400を引き起こす

また、base64文字列でHttpUtility.UrlPathEncode()を試しましたが、それでもうまくいかないようです(URLに「/」が含まれることになります)**

27
LorenVS

あなたが探しています HttpServerUtility.UrlTokenEncodeおよびHttpServerUtility.UrlTokenDecodeSystem.Web

それらはbase64でエンコードし、潜在的に危険な「+」および「/」文字を「-」および「_」に置き換えます。

MSDNドキュメント

90
orip

System.BitConverter.ToString(myByteArray) をご覧ください

ハッシュなどの片道エンコーディングには便利ですが、ssgで指摘されているように、あまり効率的ではありません。大量のデータにはお勧めしません。

1
David Glenn