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?
Haklı olduğunuzu biliyorum, kaydetme yapısını değiştirmek zorundayım. –