MachineKeyでIDを暗号化および復号化しようとしています。ここでMachineKeyで暗号化と復号化を行います。c#
は、暗号化を呼び出し、関数を解読私のコードです:ここでは
var encryptedId = Encryption.Protect(profileId.ToString(), UserId);
var decryptedId = Encryption.UnProtect(encryptedId, UserId);
は、関数である:
public static string Protect(string text, string purpose)
{
if(string.IsNullOrEmpty(text))
{
return string.Empty;
}
byte[] stream = Encoding.Unicode.GetBytes(text);
byte[] encodedValues = MachineKey.Protect(stream, purpose);
return HttpServerUtility.UrlTokenEncode(encodedValues);
}
public static string UnProtect(string text, string purpose)
{
if(string.IsNullOrEmpty(text))
{
return string.Empty;
}
byte[] stream = HttpServerUtility.UrlTokenDecode(text);
byte[] decodedValues = MachineKey.Unprotect(stream, purpose);
return Encoding.UTF8.GetString(decodedValues);
}
入力Protect
方法は15であるとこれがそのencryptedId変数を結果6wOttbtJoVBV7PxhVWXGz4AQVYcuyHvTyJhAoPu4Okd2aKhhCGbKlK_T4q3GgirotfOZYZXke0pMdgwSmC5vxg2
これを暗号化するには、この文字列をパラメータとしてに送信します。方法。 復号化の結果は15でなければなりませんが、代わりに次のようになります。1\05\0
なぜ理解できません。私を助けることができる人?
私はこの関数では整数だけを使うようにしましたが、私はまだ同じ問題を抱えています。復号化の出力は異なります。
「\ 0」以外は正しいと思われますか? – Ian
@Ian:それをintに変換できますか?だから私はそれを数字15として使うことができますか? – Bryan
これは 'string'なので、コードのどこかでchar(おそらくUTF-8形式)を解釈(返す)していると思われますので、' 1'は '1 \ 0'と' 5' '5 \ 0'(リトルエンディアンのため)。その場合、 '\ 0'をすべて空の文字列に置き換えて返してください。 – Ian