[解決済み] Base-64 char 配列の長さが無効です。
質問
タイトルの通り、取得しています。
無効な長さのBase-64 char 配列になります。
この問題については、ここで読んだことがあります。 ViewStateが大きい場合は、SQLに格納することを提案しています。私は ウィザードを使用し、大量のデータを収集するため、可能性としては は、私のViewStateは大きいです。しかし、私は"store-in-DB".に頼る前に、私のViewStateは大きいです。 しかし、私が"store-in-DB"に頼る前に、多分誰かが見て、私が持っているかどうか私に教えてください。 他の選択肢は?
以下の方法で配信用メールを構築しています。
public void SendEmailAddressVerificationEmail(string userName, string to)
{
string msg = "Please click on the link below or paste it into a browser to verify your email account.<BR><BR>" +
"<a href=\"" + _configuration.RootURL + "Accounts/VerifyEmail.aspx?a=" +
userName.Encrypt("verify") + "\">" +
_configuration.RootURL + "Accounts/VerifyEmail.aspx?a=" +
userName.Encrypt("verify") + "</a>";
SendEmail(to, "", "", "Account created! Email verification required.", msg);
}
Encryptメソッドは次のようになります。
public static string Encrypt(string clearText, string Password)
{
byte[] clearBytes = System.Text.Encoding.Unicode.GetBytes(clearText);
PasswordDeriveBytes pdb = new PasswordDeriveBytes(Password, new byte[] { 0x49, 0x76, 0x61, 0x6e, 0x20, 0x4d, 0x65, 0x64, 0x76, 0x65, 0x64, 0x65, 0x76 });
byte[] encryptedData = Encrypt(clearBytes, pdb.GetBytes(32), pdb.GetBytes(16));
return Convert.ToBase64String(encryptedData);
}
hotmailで表示されるHTMLはこんな感じです。
<ブロッククオート以下のリンクをクリックするか ブラウザに貼り付けて確認します。 メールアカウント
http://localhost:1563/Accounts/VerifyEmail.aspx?a=YOHY57xYRENEOu3H+FGq1Rf09AZAI56EPjfwuK8XWKg=
受信側では、VerifyEmail.aspx.csのページに一行があります。
string username = Cryptography.Decrypt(_webContext.UserNameToVerify, "verify");
以下はUserNameToVerifyのゲッターです。
public string UserNameToVerify
{
get
{
return GetQueryStringValue("a").ToString();
}
}
そして、これがGetQueryStringValueメソッドです。
private static string GetQueryStringValue(string key)
{
return HttpContext.Current.Request.QueryString.Get(key);
}
そして、decryptメソッドは次のようになります。
public static string Decrypt(string cipherText, string password)
{
**// THE ERROR IS THROWN HERE!!**
byte[] cipherBytes = Convert.FromBase64String(cipherText);
このエラーはコード修正で改善できるのでしょうか、それともViewStateをデータベースに保存しなければならないのでしょうか?
解決方法は?
base64でエンコードされた文字列の長さは常に4の倍数です。 もし4の倍数でない場合、次のようになります。
=
の文字が追加されます。 クエリ文字列の形式は
?name=value
には問題があります。
value
が含まれています。
=
のチャタリング(一部はドロップされます、正確な動作は覚えていません)。 を適切な数だけ追加することで回避できるかもしれません。
=
文字が含まれています。
編集1
の値は、そのような場合は
UserNameToVerify
がありました。
"+"
に変更されました。
" "
のようにする必要があるかもしれません。
a = a.Replace(" ", "+");
これで長さが揃うはずです。
int mod4 = a.Length % 4;
if (mod4 > 0 )
{
a += new string('=', 4 - mod4);
}
もちろん
UrlEncode
(LukeHの答えのように)これはすべて無意味になるはずです。
関連
-
[解決済み】「入力文字列が正しい形式ではありませんでした」エラーの解決方法は?[重複しています]。
-
[解決済み】取り消せないメンバはメソッドのように使えない?
-
[解決済み】Unity 「関連するスクリプトを読み込むことができません」「Win32Exception: システムは指定されたファイルを見つけることができません"
-
[解決済み] リクエストの最大長を超えました。
-
[解決済み] C#の正しいバージョン番号を教えてください。
-
[解決済み] C#でベースコンストラクタを呼び出す
-
[解決済み] URLのPath.Combineは?
-
[解決済み] Base64エンコーディングは何に使うのですか?
-
[解決済み] web.configでmaxJsonLengthの長さを無制限に設定することは可能ですか?
-
[解決済み】文字列の中にある文字列(実際はchar)の出現回数を数えるには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】プログラム実行中に1秒待つ
-
[解決済み] [Entity Framework 4.1でエンティティに関連オブジェクトを追加する際に、エンティティオブジェクトをIEntityChangeTracker.の複数のインスタンスから参照できない。
-
[解決済み】"The ConnectionString property has not been initialized "を修正する方法
-
[解決済み] 'SubSonic.Schema .DatabaseColumn' 型のオブジェクトをシリアライズする際に、循環参照が検出されました。
-
[解決済み】Sequence contains no matching element(シーケンスにマッチする要素がない
-
[解決済み】リソースの読み込みに失敗した:ステータス500(内部サーバーエラー)のサーバーの応答)
-
[解決済み】EF 5 Enable-Migrations : アセンブリにコンテキストタイプが見つかりませんでした
-
[解決済み】MetadataException: 指定されたメタデータ・リソースをロードできない
-
[解決済み】Unity 「関連するスクリプトを読み込むことができません」「Win32Exception: システムは指定されたファイルを見つけることができません"
-
[解決済み】OnCollisionEnter2Dが実行されない?