orneg dene sifrelem kodu
using System;
using System.Collections;
using System.Xml;
using System.Text;
namespace DefaultNamespace
{
public class cPasswords:cNode
{
ArrayList _passwords=new ArrayList();
public ArrayList Passwords
{
get
{
return _passwords;
}
}
public cPasswords(string name,string password_hash,int id){
mName=name;
mID=id;
mPasswordHash=password_hash;}
public **** Add(cPassword password)
{
Passwords.Add(password);
}
public **** Remove(cPassword password)
{
Passwords.Remove(password);
}
public cPassword GetPassword(int id)
{
foreach(cPassword password in Passwords)
if(password.mID==id)
return password;
return null;
}
public override **** Save(XmlTextWriter writer)
{
writer.WriteStartElement("passwords");
writer.WriteAttributeString("name",mName);
if(StringUtils.IsEmptyString(mPasswordHash))
foreach (cPassword password in Passwords)
password.Save(writer);
else
{
writer.WriteAttributeString("password",mPasswordHash);
//если не открывали, значит старые данные верны и пароль не знаю
if(mIsLocked==false)
Encrypt();
writer.WriteString(mEncryptedValue);
}
writer.WriteEndElement();
}
protected override **** Encrypt()
{
//шифрую с mPassword
if(StringUtils.IsEmptyString(mPassword))
System.Windows.Forms.MessageBox.Show("No password to save Passwords");
else
{
System.IO.StringWriter sw=new System.IO.StringWriter();
XmlTextWriter writer_tmp = new XmlTextWriter(sw);
//чтобы был один root елемент
writer_tmp.WriteStartElement("e");
foreach (cPassword password in Passwords)
password.Save(writer_tmp);
writer_tmp.WriteEndElement();
mEncryptedValue=MyEnc.Encrypt(sw.ToString(),mPassword);
}
}
public override bool Decrypt(string password,ref int id_counter)
{
try
{
System.IO.StringReader sr=new System.IO.StringReader(MyEnc.Decrypt(mEncryptedValue,password));
XmlTextReader reader_tmp=new XmlTextReader(sr);
//считал бесполезный <e>
reader_tmp.Read();
Read(reader_tmp, ref id_counter);
mEncryptedValue="";
mPassword=password;
return true;
}
catch(Exception ex)
{
System.Windows.Forms.MessageBox.Show("Error decrypting data:\n"+ex.Message,"openPim",System.Windows.Forms.MessageBoxButtons.OK,System.Windows.Forms.MessageBoxIcon.Hand);
return false;
}
}
public **** Read(XmlTextReader reader, ref int id_counter)
{
Passwords.Clear();
while (reader.Read() && reader.Name == "password"){
cPassword password_tmp=new cPassword(id_counter++,reader.GetAttribute("title"),
reader.GetAttribute("url"),reader.GetAttribute("password"),reader.GetAttribute("login"),
reader.GetAttribute("comment"));
Passwords.Add(password_tmp);}
}
public override **** Find(string search_string,ref ArrayList results)
{
if(mName.ToUpper().IndexOf(search_string.ToUpper())!=-1){
FindResult findResult=new FindResult();
findResult.node=this;
findResult.item=null;
results.Add(findResult);}
StringBuilder sb=new StringBuilder();
sb.Capacity=200;
foreach(cPassword password in Passwords)
{
sb.Length=0;
sb.AppendFormat("{0} {1} {2}",password.mTitle,password.mURL,password.Comment);
if(sb.ToString().ToUpper().IndexOf(search_string.ToUpper())!=-1)
{
FindResult findResult=new FindResult();
findResult.node=this;
findResult.item=password;
results.Add(findResult);
}
}
}
}
}