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)); }
/// <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)); }
/// <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))); }
/// <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))); }