Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > .NET для новичков > Перестановка байт. Конвертация в текст


Автор: CasperSC 3.5.2010, 22:38
Код

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication4
{
    class Program
    {
        
        
        static void Main(string[] args)
        {
            String pass = "pass"; //объявляем любую строку
            Byte[] passByte = Encoding.Unicode.GetBytes(pass); //перекодировываем её в массив байт и получаем кодировку для формата UTF-16
            Byte[] passByteResCrypt = new Byte[passByte.Length]; //создаём второй массив размером с первый массив для их взаимодействия

            for (int i = passByte.Length; i > 0; i -= 2)//в цикле делаем так: из  112 0, 97 0, 115 0, 115 0 получаем в другом массиве: 115 0, 115 0, 97 0, 112 0- то есть цифры в массиве по две переставляются.
            {
                passByteResCrypt[i - 2] = passByte[passByte.Length - i];
                passByteResCrypt[i - 1] = passByte[passByte.Length - i + 1];
            }

            pass = Convert.ToBase64String(passByteResCrypt);
            Console.WriteLine("Результат перестановки:          " + pass);

            for (int i = passByteResCrypt.Length; i > 0; i -= 2)
            {
                passByte[i - 2] = passByteResCrypt[passByteResCrypt.Length - i];
                passByte[i - 1] = passByteResCrypt[passByteResCrypt.Length - i + 1];
            }

            pass = Convert.ToBase64String(passByte);
            Console.WriteLine("Результат обратной перестановки: " + pass);
            Console.ReadKey();
        }
    }
}


Вот тут у меня не слово возвращается в первоначальный вид, а вообще какая-то каша из букв. Как сделать? Тут скорее вопрос как из массива байт, конвертировать в строку, так как это полюбому не правильно: 
Код

 pass = Convert.ToBase64String(passByteResCrypt);


Автор: Экскалупатор 3.5.2010, 22:59
Цитата(CasperSC @  3.5.2010,  21:38 Найти цитируемый пост)
 Byte[] passByte = Encoding.Unicode.GetBytes(pass); 


а почему обратно так же не конвертируешь?

Encoding.Unicode.GetString(passByte)

Автор: CasperSC 3.5.2010, 23:04
О спасибо! Работает. Я просто этими всякими Encode, Unicode и прочими вещами не занимался никогда. Так простенькие приведения типов и Convert.что-то. 
Код

pass = Encoding.Unicode.GetString(passByte);

Автор: Экскалупатор 3.5.2010, 23:12
CasperSC,  так вроде логичнее было бы сразу сделать просто обратное действие тем же способом. а ты что то другое использовал.

Автор: CasperSC 3.5.2010, 23:25
Вообще пытаюсь научиться всяким перестановкам, работой с шифрованием и т.д. Короче мне нужно на программу написать адекватную защиту. Пока что мне это кажется не то чтобы сильно сложным, скорее вообще не понятным. Щас читаю про SecureString и шифрование с открытым и закрытым ключом читаю и не видя примеров ничего не понимаю почти. А 
Код

pass = Convert.ToBase64String(passByteResCrypt);

я взял из другого примера. Я вообще не пойму есть ли смысл перестановку делать в виде массива байт? 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)