2016-03-22 13 views
0

bir sözlük kullanmak: https://msdn.microsoft.com/en-us/library/system.security.cryptography.protecteddata%28v=vs.110%29.aspxProtectedData Ben burada bulduğu ProtectedData kullanacağı dizeleri

Benim sorunum bayt kaynağına bir sözlük uyarlayabilirsiniz nasıl bir bayt gelen dönüştürür rağmen, anlayamıyorum ki

[] string, Unprotect'i yapmaya gittiğimde, şifresini çözemez. Öyle denedim:

kod DataProtection olmadan:

public static void SetLoginUserDataForFile(ConnectionData data) 
{ 
    Dictionary<string, Dictionary<string, string>> retVal = new Dictionary<string, Dictionary<string, string>>(); 
    Dictionary<string, string> dataValues = new Dictionary<string, string>(); 

    if (File.Exists(System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "PROGRAMFILE", "PROGRAMFILE"))) 
    { 
     string fileData = File.ReadAllText(System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "PROGRAMFILE", "PROGRAMFILE")); 
     try 
     { 
      retVal = JsonConvert.DeserializeObject<Dictionary<string, Dictionary<string, string>>>(Decrypt(fileData, "pa$$w0rd")); 
     } 
     catch (Exception ex) 
     { 
      retVal = new Dictionary<string, Dictionary<string, string>>(); 
     } 

     dataValues.Add("HashedPwd", data.HashedPwd); 
     dataValues.Add("CanAccessOffline", data.LoggedUser.CanAccessOffline.ToString()); 
     dataValues.Add("CanSavePassword", data.LoggedUser.CanSavePassword.ToString()); 

     if (retVal.ContainsKey(data.LoggedUser.UserName)) 
      retVal[data.LoggedUser.UserName] = dataValues; 
     else 
      retVal.Add(data.LoggedUser.UserName, dataValues); 

     File.WriteAllText(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "PROGRAMFILE", "PROGRAMFILE"), Encrypt(JsonConvert.SerializeObject(retVal), "pa$$w0rd")); 
    } 
} 

i deneyin bu:

public static void SetLoginUserDataForFile(ConnectionData data) 
{ 
    Assembly assembly = Assembly.GetExecutingAssembly(); 
    String GuidID = assembly.GetType().GUID.ToString(); 

    Dictionary<string, Dictionary<string, string>> retVal = new Dictionary<string, Dictionary<string, string>>(); 
    Dictionary<string, string> dataValues = new Dictionary<string, string>(); 

    if (File.Exists(System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "PROGRAMFILE", "PROGRAMFILE"))) 
    { 
     string fileData = File.ReadAllText(System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "PROGRAMFILE", "PROGRAMFILE")); 
     try 
     { 
      retVal = JsonConvert.DeserializeObject<Dictionary<string, Dictionary<string, string>>>(Decrypt(fileData, DataProtection.Unprotect(GetBytes(GuidID)).ToString())); 
     } 
     catch (Exception ex) 
     { 
      retVal = new Dictionary<string, Dictionary<string, string>>(); 
     } 

     dataValues.Add("HashedPwd", data.HashedPwd); 
     dataValues.Add("CanAccessOffline", data.LoggedUser.CanAccessOffline.ToString()); 
     dataValues.Add("CanSavePassword", data.LoggedUser.CanSavePassword.ToString()); 

     if (retVal.ContainsKey(data.LoggedUser.UserName)) 
      retVal[data.LoggedUser.UserName] = dataValues; 
     else 
      retVal.Add(data.LoggedUser.UserName, dataValues); 

     File.WriteAllText(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "PROGRAMFILE", "PROGRAMFILE"), Encrypt(JsonConvert.SerializeObject(retVal), DataProtection.Protect(GetBytes(GuidID)).ToString())); 
    } 
} 

public static byte[] GetBytes(string str) 
{ 
    byte[] bytes = new byte[str.Length * sizeof(char)]; 
    System.Buffer.BlockCopy(str.ToCharArray(), 0, bytes, 0, bytes.Length); 
    return bytes; 
}  

Ben tekrar okumak kez dosyasını çağırarak, açmak için artık mümkün .. nasıl düzeltirim?

cevap

0

Herhangi bir nedenle dosyanızın bir metin dosyası olduğunu ve byte dizilerinin ToString() numaralı basit bir çağrıyla seri hale getirilip serileceğini varsayarsınız. Bu durum böyle değil.

Bayt dizilerini okuyan ve yazan File yöntemlerini kullanın. Çünkü sahip olduğun şey bu.

+0

Haklı olduğunuzu biliyorum, kaydetme yapısını değiştirmek zorundayım. –