Esempio n. 1
0
        /// <summary>
        /// 随机打乱字符串中的所有字符
        /// </summary>
        /// <param name="str">需要被打乱的字符串</param>
        /// <param name="seed">种子</param>
        /// <returns>被打乱的字符串</returns>
        public static string Shuffle(string str, int?seed = null)
        {
            KGuard.Requires <ArgumentNullException>(str != null);
            var random = KUtil.MakeRandom(seed);

            var requested = new string[str.Length];

            for (var i = 0; i < str.Length; i++)
            {
                var index = random.Next(0, str.Length - 1);

                requested[i]     = requested[i] ?? str.Substring(i, 1);
                requested[index] = requested[index] ?? str.Substring(index, 1);

                if (index == i)
                {
                    continue;
                }

                var temp = requested[i];
                requested[i]     = requested[index];
                requested[index] = temp;
            }

            return(KArray.Reduce(requested, (v1, v2) => v1 + v2, string.Empty));
        }
Esempio n. 2
0
        /// <summary>
        /// 加密
        /// </summary>
        /// <param name="content">加密内容</param>
        /// <param name="key">密钥</param>
        /// <returns></returns>
        public string Encrypt(byte[] content, byte[] key)
        {
            rijndaelManaged.GenerateIV();

            var aesEncrypt  = rijndaelManaged.CreateEncryptor(key, rijndaelManaged.IV);
            var aesBuffer   = aesEncrypt.TransformFinalBlock(content, 0, content.Length);
            var ivAesBuffer = KArray.Merge(rijndaelManaged.IV, aesBuffer);

            return(Encode(Convert.ToBase64String(rijndaelManaged.IV),
                          Convert.ToBase64String(aesBuffer),
                          Convert.ToBase64String(HMac(ivAesBuffer, key))));
        }
Esempio n. 3
0
        /// <summary>
        /// 解密被加密的内容
        /// </summary>
        /// <param name="str">需要解密的字符串</param>
        /// <param name="key">密钥</param>
        /// <returns>解密后的值</returns>
        public byte[] Decrypt(string str, byte[] key)
        {
            string iv, value, hmac;

            Decode(str, out iv, out value, out hmac);

            var aesBuffer   = Convert.FromBase64String(value);
            var ivBuffer    = Convert.FromBase64String(iv);
            var ivAesBuffer = KArray.Merge(rijndaelManaged.IV, aesBuffer);

            if (Convert.ToBase64String(HMac(ivAesBuffer, key)) != hmac)
            {
                throw new Exception("HMac validation failed");
            }

            var aesDecrypt = rijndaelManaged.CreateDecryptor(key, ivBuffer);

            aesBuffer = aesDecrypt.TransformFinalBlock(aesBuffer, 0, aesBuffer.Length);

            return(aesBuffer);
        }