2015-02-09 38 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("-", ""); 
    } 

}