문자열을 가져와 암호화 한 다음 해독하는 간단한 암호화 방법을 찾기 위해 온라인으로 사냥했습니다. 아이디어는 내가 계획 텍스트에 들어갈 수없는 URL에 ID가 필요하다는 것입니다.암호화 된 문자열에 결과에 슬래시 (/)가있어서 URL에 문제가 발생합니다.
은 내가 찾은 클래스는 대부분의 시간을 큰 workes, 그러나 때때로, 나는/그 안에있는 암호화 된 문자열로 끝날 : 당신이 상상할 수 있듯이 사용할 때
OSprnGR/0os4DQpQsa0gIg==
, 즉 문제가 발생 URL. 그래서 문자열을 UrlEncode로하면 문제가 해결 될 것이라고 생각했습니다.
그렇지 않았습니다. 대신이의
http://localhost:54471/BrokerDashboard/BuyingLeads/LeadView/OSprnGR%2f0os4DQpQsa0gIg%3d%3d
을 : URL이 다음과 같습니다 경우에도
나는 여전히 같은 오류가
http://localhost:54471/BrokerDashboard/BuyingLeads/LeadView/OSprnGR/0os4DQpQsa0gIg==
내가 사용하고 클래스의 :HTTP 오류 404.0 - 에게 당신이 찾고있는 리소스를 찾을 수 없음 for의 이름이 변경되었거나 일시적으로 사용할 수 없습니다. 여기
public static class Encryption
{
public static string keyString { get { return "6C3A231C-57B2-4BA0-AFD6-306098234B11"; } }
private static byte[] salt = Encoding.ASCII.GetBytes("somerandomstuff");
public static string Encrypt(string plainText)
{
Rfc2898DeriveBytes key = new Rfc2898DeriveBytes(keyString, salt);
MemoryStream ms = new MemoryStream();
StreamWriter sw = new StreamWriter(new CryptoStream(ms, new RijndaelManaged().CreateEncryptor(key.GetBytes(32), key.GetBytes(16)), CryptoStreamMode.Write));
sw.Write(plainText);
sw.Close();
ms.Close();
string beforeUrlEncoded = Convert.ToBase64String(ms.ToArray());
string afterUrlEndcoded = HttpUtility.UrlEncode(beforeUrlEncoded);
return afterUrlEndcoded;
}
public static string Decrypt(string encrypted)
{
//string urlDecoded = HttpUtility.UrlDecode(encrypted); // <--- Turns out you don't need this
Rfc2898DeriveBytes key = new Rfc2898DeriveBytes(keyString, salt);
ICryptoTransform d = new RijndaelManaged().CreateDecryptor(key.GetBytes(32), key.GetBytes(16));
byte[] bytes = Convert.FromBase64String(encrypted);
return new StreamReader(new CryptoStream(new MemoryStream(bytes), d, CryptoStreamMode.Read)).ReadToEnd();
}
}
편집 :
여기에 경로입니다 :
routes.MapRoute(
name: "BrokerLead",
url: "BrokerDashboard/BuyingLeads/LeadView/{id}"
);
'HttpUtility.UrlEncode' 대신'HttpServerUtility.UrlTokenEncode'를 사용해 보셨나요? –
그냥 당신이 이미 bade64에 대한 위키 백과 문서를 읽고 그 URL의 안전한 버전을 사용하는 가능성을 버렸다는 것을 확인하십시오. 나는 그것을 포스트에서 명확히하는 것이 좋습니다. –
@AlexeiLevenkov - .NET에는 URL Safe Base64 인코딩을 사용할 수 있습니까? –