アプリケーションのログと認証に Windows Live Id サービスを使用しています。ユーザーが認証された後、Windows Live Id Service から送信される応答でトークンを取得します。このトークンから一意の識別子を取得するために、このトークンをデコードしたいと考えています。これをよりよく説明するリンクは次のとおりです 。
Visual Studio でのデバッグ中に、CryptoStream オブジェクトを作成しようとすると例外が発生しますが、コードは壊れません。
しかし、ストリームをバイトに変換しようとすると、エラーがスローされ、コードが壊れます。
それは言います:
「復号化するデータの長さが無効です」
私が使用しているコードは次のとおりです。
string token=""; //Token Sent by the service
string SecretKey = ""; //SecretKey Obtained while registering my application
byte[] cryptKey = derive(secretKey, "ENCRYPTION");
static byte[] derive(string secret, string prefix)
{
using(HashAlgorithm hashAlg = HashAlgorithm.Create("SHA256"))
{
const int keyLength = 16;
byte[] data = Encoding.Default.GetBytes(prefix+secret);
byte[] hashOutput = hashAlg.ComputeHash(data);
byte[] byteKey = new byte[keyLength];
Array.Copy(hashOutput, byteKey, keyLength);
return byteKey;
}
}
const int ivLength = 16;
token = HttpUtility.UrlDecode(token);
byte[] ivAndEncryptedValue = Convert.FromBase64String(token);
aesAlg = new RijndaelManaged();
aesAlg.KeySize = 128;
aesAlg.Key = cryptKey;
aesAlg.Padding = PaddingMode.PKCS7;
memStream = new MemoryStream(ivAndEncryptedValue);
byte[] iv = new byte[ivLength];
memStream.Read(iv, 0, ivLength);
aesAlg.IV = iv;
cStream = new CryptoStream(memStream, aesAlg.CreateDecryptor(), CryptoStreamMode.Read);
sReader = new StreamReader(cStream, Encoding.ASCII);
コードの次の行は、「復号化するデータの長さが無効です」というエラーをスローします。
decodedValue = sReader.ReadToEnd(); //Throws error:"Length of the data to decrypt is invalid"
この背後にある理由が何であるかについて、誰かが何か考えを持っていますか?
どんな種類の助けや指導も大歓迎です。
前もって感謝します。
よろしく、
アビシェーク