Example #1
0
        //useage
        //var spicker = new FileSavePicker();
        //spicker.FileTypeChoices.Add("XML", new List<String>() { ".xml" });
        //var sfs = await spicker.PickSaveFileAsync();
        //await DataPacManager.SerializeAsync(sfs, "test");
        public static async Task SerializeAsync(StorageFile sf, string serkey)
        {
            if (Core.Current.CurrentUser == null)
            {
                throw new Exception();
            }
            DataPac dat = new DataPac();
            await Task.Run(async() =>
            {
                //create ser aesobj
                string pid         = Core.Current.CurrentUser.PID;
                dat.pid            = pid;
                string str1        = pid + serkey;
                string str2        = serkey + pid;
                var hashobj        = new Helper.HashProvider();
                string hstr1       = hashobj.Hash(str1);
                string hstr2       = hashobj.Hash(str2);
                string serpwd_hash = hstr1 + hstr2;
                Helper.AESProvider _AESobj;
                var ivhash = new Helper.HashProvider(HashAlgorithmNames.Md5);
                byte[] _iv = ivhash.Hashbytes(pid);
                //create token
                string ranstr = (new Helper.RandomGenerator()).getRandomString(20);
                dat.token     = ranstr;
                string kstr1  = ranstr + serpwd_hash;
                string kstr2  = serpwd_hash + ranstr;

                var keyhash = new Helper.HashProvider();
                byte[] _key = new byte[128];
                byte[] btar = keyhash.Hashbytes(kstr1);
                Array.Copy(btar, 0, _key, 0, 64);
                btar = keyhash.Hashbytes(kstr2);
                Array.Copy(btar, 0, _key, 64, 64);
                _AESobj = new Helper.AESProvider(_iv, _key);
                //encrypt dats
                dat.pwd_hash            = _AESobj.Encrypt(Core.Current.CurrentUser.PWD_hash);
                dat.sertoken            = _AESobj.Encrypt(ranstr);
                dat.vertifystr          = _AESobj.Encrypt(AssetsController.getLocalSequenceString(Core.Current.CurrentUser.UID));
                List <DataPac.dRow> arr = new List <DataPac.dRow>();
                using (APPDbContext db = new APPDbContext())
                {
                    foreach (var t in db.Recordings.ToList())
                    {
                        if (t.uid == Core.Current.CurrentUser.UID)
                        {
                            DataPac.dRow obj = new DataPac.dRow()
                            {
                                key   = _AESobj.Encrypt(t.key),
                                value = _AESobj.Encrypt(t.value)
                            };
                            arr.Add(obj);
                        }
                    }
                }
                dat.dRows = arr.ToArray();
                await dat.SerializeAsync(sf);
            });
        }
Example #2
0
        public static LoginUser CreateObj(string pid, string pwd)
        {
            var user = new LoginUser();

            user.PID = pid;

            //加盐方式 str1=pid+pwd str2=pwd+pid
            string str1    = pid + pwd;
            string str2    = pwd + pid;
            var    hashobj = new Helper.HashProvider();
            string hstr1   = hashobj.Hash(str1);
            string hstr2   = hashobj.Hash(str2);

            user.PWD_hash = hstr1 + hstr2;

            return(user);
        }
Example #3
0
        private static string _AppHashToken(ServiceInstance server)
        {
            var hashobj   = new Helper.HashProvider();
            var ranstrobj = new Helper.RandomGenerator();

            server.HashMark = hashobj.Hash(ranstrobj.getRandomString(50));
            while (true)
            {
                bool vt = true;
                foreach (var t in _ServiceInstances.Keys)
                {
                    if (t.Info.LoginHashToken == server.HashMark)
                    {
                        vt = false;
                    }
                }
                if (vt)
                {
                    break;
                }
                server.HashMark = hashobj.Hash(ranstrobj.getRandomString(50));
            }
            return(server.HashMark);
        }
Example #4
0
        //useage
        //var picker = new FileOpenPicker();
        //picker.FileTypeFilter.Add(".xml");
        //    var sf = await picker.PickSingleFileAsync();
        //await DataPacManager.DeserializeAsync(sf, "test");@throw KeyVertifyFailException
        public static async Task DeserializeAsync(StorageFile sf, string serkey)
        {
            var dat = await DataPac.DeserializeAsync(sf);

            string pid        = dat.pid;
            string token      = dat.token;
            string desertoken = "";

            Helper.AESProvider _AESobj = null;
            await Task.Run(() =>
            {
                //create ser aesobj
                string str1        = pid + serkey;
                string str2        = serkey + pid;
                var hashobj        = new Helper.HashProvider();
                string hstr1       = hashobj.Hash(str1);
                string hstr2       = hashobj.Hash(str2);
                string serpwd_hash = hstr1 + hstr2;
                var ivhash         = new Helper.HashProvider(HashAlgorithmNames.Md5);
                byte[] _iv         = ivhash.Hashbytes(pid);

                string kstr1 = token + serpwd_hash;
                string kstr2 = serpwd_hash + token;

                var keyhash = new Helper.HashProvider();
                byte[] _key = new byte[128];
                byte[] btar = keyhash.Hashbytes(kstr1);
                Array.Copy(btar, 0, _key, 0, 64);
                btar = keyhash.Hashbytes(kstr2);
                Array.Copy(btar, 0, _key, 64, 64);
                _AESobj    = new Helper.AESProvider(_iv, _key);
                desertoken = _AESobj.Decrypt(dat.sertoken);
            });

            if (desertoken != token)
            {
                throw new KeyVertifyFailException()
                      {
                          _DataPac = dat
                      }
            }
            ;
            await Task.Run(() =>            //InvalidOperationException
            {
                using (APPDbContext db = new APPDbContext())
                {
                    //search user
                    User user = null;
                    foreach (var t in db.Users.ToList())
                    {
                        if (t.pid == pid)
                        {
                            user = t;
                        }
                    }

                    if (user == null)
                    {
                        string pwd_hash_aes = AssetsController.EncryptwithAppaesobj(_AESobj.Decrypt(dat.pwd_hash));
                        User dbuser         = new User()
                        {
                            pid = pid,
                            pwd = pwd_hash_aes
                        };
                        db.Entry(dbuser).State = Microsoft.EntityFrameworkCore.EntityState.Added;
                        db.SaveChanges();
                        user = db.Users.Single(b => b.pid == pid);;
                    }
                    //set user sa
                    AssetsController.getLocalSequenceString(user.ID);
                    var saobj = db.SA.Single(t => t.ID == user.ID);
                    //saobj.Data = dat.vertifystr;
                    saobj.Data            = _AESobj.Decrypt(dat.vertifystr);
                    db.Entry(saobj).State = Microsoft.EntityFrameworkCore.EntityState.Modified;

                    foreach (var t in dat.dRows)
                    {
                        Recording obj = new Recording()
                        {
                            uid   = user.ID,
                            key   = _AESobj.Decrypt(t.key),
                            value = _AESobj.Decrypt(t.value)
                        };
                        db.Entry(obj).State = Microsoft.EntityFrameworkCore.EntityState.Added;
                    }
                    db.SaveChanges();
                }
            });
        }