Ejemplo n.º 1
0
        private static byte[] EncryptCore(byte[] dataBytes, byte[] keyBytes, RCYOrder order = RCYOrder.DESC)
        {
            var first  = RCYEncryptionProvider.Encrypt(dataBytes, keyBytes, order);
            var second = RCYEncryptionProvider.Encrypt(first, keyBytes, order);

            return(RCYEncryptionProvider.Encrypt(second, keyBytes, order));
        }
Ejemplo n.º 2
0
 /// <summary>
 /// Decrypt
 /// </summary>
 /// <param name="data"></param>
 /// <param name="key"></param>
 /// <param name="order"></param>
 /// <returns></returns>
 public static byte[] Decrypt(byte[] data, byte[] key, RCYOrder order = RCYOrder.DESC)
 {
     return(EncryptCore(data, key, order));
 }
Ejemplo n.º 3
0
        /// <summary>
        /// Decrypt
        /// </summary>
        /// <param name="data"></param>
        /// <param name="key"></param>
        /// <param name="encoding"></param>
        /// <param name="order"></param>
        /// <returns></returns>
        public static string Decrypt(string data, string key, Encoding encoding = null, RCYOrder order = RCYOrder.DESC)
        {
            encoding = encoding.SafeValue();
            var dataBytes = Convert.FromBase64String(data);
            var keyBytes  = encoding.GetBytes(key);

            return(encoding.GetString(EncryptCore(dataBytes, keyBytes, order)));
        }
Ejemplo n.º 4
0
 /// <summary>
 /// Encrypt
 /// </summary>
 /// <param name="data"></param>
 /// <param name="key"></param>
 /// <param name="encoding"></param>
 /// <param name="order"></param>
 /// <returns></returns>
 public static string Encrypt(byte[] data, string key, Encoding encoding = null, RCYOrder order = RCYOrder.DESC)
 {
     return(Convert.ToBase64String(EncryptCore(data, encoding.SafeValue().GetBytes(key), order)));
 }
        private static unsafe byte[] EncryptCore(byte[] data, byte[] pass, RCYOrder order)
        {
            byte[] mBox = GetKey(pass, KEY_LENGTH);
            byte[] output = new byte[data.Length];
            int    i = 0, j = 0;
            var    length = data.Length;

            if (order == RCYOrder.ASC)
            {
                fixed(byte *_mBox = &mBox[0])
                fixed(byte *_data   = &data[0])
                fixed(byte *_output = &output[0])
                {
                    for (Int64 offset = 0; offset < length; offset++)
                    {
                        i = (++i) & 0xFF;
                        j = (j + *(_mBox + i)) & 0xFF;

                        byte a = *(_data + offset);
                        byte c = (byte)(a ^ *(_mBox + ((*(_mBox + i) & *(_mBox + j)))));
                        *(_output + offset) = c;

                        j = (j + a + c);
                    }
                }
            }
            else
            {
                fixed(byte *_mBox = &mBox[0])
                fixed(byte *_data   = &data[0])
                fixed(byte *_output = &output[0])
                {
                    for (int offset = data.Length - 1; offset >= 0; offset--)
                    {
                        i = (++i) & 0xFF;
                        j = (j + *(_mBox + i)) & 0xFF;

                        byte a = *(_data + offset);
                        byte c = (byte)(a ^ *(_mBox + ((*(_mBox + i) & *(_mBox + j)))));
                        *(_output + offset) = c;

                        j = (j + a + c);
                    }
                }
            }

            //int i = 0, j = 0;
            //byte a, c;

            //if (order == OrderType.Asc) {
            //    for (int offset = 0; offset < data.Length; offset++) {
            //        i = (++i) & 0xFF;
            //        j = (j + mBox[i]) & 0xFF;

            //        a = data[offset];
            //        c = (byte)(a ^ mBox[(mBox[i] & mBox[j])]);
            //        output[offset] = c;

            //        j = j + (int)a + (int)c;
            //    }
            //} else {
            //    for (int offset = data.Length - 1; offset >= 0; offset--) {
            //        i = (++i) & 0xFF;
            //        j = (j + mBox[i]) & 0xFF;

            //        a = data[offset];
            //        c = (byte)(a ^ mBox[(mBox[i] & mBox[j])]);
            //        output[offset] = c;

            //        j = j + (int)a + (int)c;
            //    }
            //}
            return(output);
        }
 /// <summary>
 /// Encrypt
 /// </summary>
 /// <param name="data"></param>
 /// <param name="key"></param>
 /// <param name="encoding"></param>
 /// <param name="order"></param>
 /// <returns></returns>
 public static string Encrypt(string data, string key, Encoding encoding = null, RCYOrder order = RCYOrder.ASC)
 {
     encoding = encoding.SafeValue();
     return(Convert.ToBase64String(EncryptCore(encoding.GetBytes(data), encoding.GetBytes(key), order)));
 }