2015-02-09 41 views
0

我有一個問題,我需要加密/解密一個整數值,並將其傳遞給一個URL到查詢字符串。MVC 4/5 - C# - 查詢字符串值的2種方法加密

而不是做「www.mysite /用戶/ ID」我想要做「www.mysite /用戶/ encrypted_value_of_id」

當然和我需要解密的價值。

我需要一個基本簡單的直接url友好的加密沒有什麼奇特的。我嘗試了幾個樣本,不同的加密方法,但沒有任何工作。

有什麼建議嗎?

回答

0

一個值得思考的問題:加密的ID是否真的和ID有區別?畢竟,它仍然是一個獨特的ID,對吧?

這且不說,這裏有一個小東西,我用的時候我需要加密的東西,往返到客戶端:

public static class MachineKeyEncryptionExtensions 
{ 
    private static ThreadLocal<BinaryFormatter> formatterPool = 
      new ThreadLocal<BinaryFormatter>(() => new BinaryFormatter()); 

    public static string Encrypt(this object rci) 
    { 
     byte[] data; 
     using (var ms = new MemoryStream()) 
     { 
      formatterPool.Value.Serialize(ms, rci); 
      data = ms.ToArray(); 
     } 
     var ba=MachineKey.Protect(data, "encrypted data"); 
     return Convert.ToBase64String(ba); 
    } 
    public static T Decrypt<T>(this string encrypted) 
    { 
     var ba = Convert.FromBase64String(encrypted); 
     var decodedArr=MachineKey.Unprotect(ba, "encrypted data"); 
     object o; 
     using (var ms = new MemoryStream(decodedArr)) 
     { 
      o = formatterPool.Value.Deserialize(ms); 
     } 

     return (T)o; 

    } 
    public static byte[] StringToByteArray(String hex) 
    { 
     int numberChars = hex.Length; 
     byte[] bytes = new byte[numberChars/2]; 
     for (int i = 0; i < numberChars; i += 2) 
      bytes[i/2] = Convert.ToByte(hex.Substring(i, 2), 16); 
     return bytes; 
    } 
    public static string ByteArrayToString(byte[] ba) 
    { 
     string hex = BitConverter.ToString(ba); 
     return hex.Replace("-", ""); 
    } 

}