Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.02.2015, 06:29   #1
NightSky41
 
Регистрация: 24.12.2014
Сообщений: 4
По умолчанию [Delphi][C#]Перевод кода из C# в Delphi.

Имеется исходник http://rghost.ru/6ppQfwpvw на C# проги, которая "шифрует" и "дешифрует" ключ. В течении месяца безуспешно пытаюсь его переписать на Delphi для использования в своей проге. Помогите пожалуйста.
NightSky41 вне форума Ответить с цитированием
Старый 21.02.2015, 09:20   #2
challengerr
Участник клуба
 
Аватар для challengerr
 
Регистрация: 30.07.2008
Сообщений: 1,609
По умолчанию

Скачал. Посмотрел. Там немного кода. Причем по виду вроде бы не сложный.
Какие ошибки появляются?
"SPACE.THE FINAL FRONTIER.This's a voyage of starship Enterprise. It's 5-year mission to explore strange new worlds,to seek out new life and civilizations,to boldly go where no man has gone before"
challengerr вне форума Ответить с цитированием
Старый 21.02.2015, 09:30   #3
NightSky41
 
Регистрация: 24.12.2014
Сообщений: 4
По умолчанию

Цитата:
Сообщение от challengerr Посмотреть сообщение
Скачал. Посмотрел. Там немного кода. Причем по виду вроде бы не сложный.
Какие ошибки появляются?
Сложность в том, что не знаю C#.
NightSky41 вне форума Ответить с цитированием
Старый 21.02.2015, 09:44   #4
lomastr_
Форумчанин
 
Регистрация: 16.01.2015
Сообщений: 672
По умолчанию

за месяц можно освоить, врете вы..
lomastr_ вне форума Ответить с цитированием
Старый 21.02.2015, 09:47   #5
NightSky41
 
Регистрация: 24.12.2014
Сообщений: 4
По умолчанию

Цитата:
Сообщение от lomastr_ Посмотреть сообщение
за месяц можно освоить, врете вы..
По простым гайдам, пытался перевести код, дальше циклов и проверок на знаки не ушёл.
NightSky41 вне форума Ответить с цитированием
Старый 21.02.2015, 09:59   #6
challengerr
Участник клуба
 
Аватар для challengerr
 
Регистрация: 30.07.2008
Сообщений: 1,609
По умолчанию

Код:
 public partial class Form_Main : Form{
public Form_Main() { InitializeComponent(); } // инициализация формы (не интересно особо)
private void btnConvertTo_Click(object sender, EventArgs e) { // обработка нажатия на кнопку конвертации туда
var converter = new ArmASerialConverter(); // создание экземпляра класса конвертера
var bytes = converter.SerialToRegistry(txtKeyTo.Text); // вызов метода для конвертации
txtRegistryTo.Text = BitConverter.ToString(bytes); // преобразование результата в строку
}

private void btnConvertFrom_Click(object sender, EventArgs e)  {// обработка конвертации на нажатие кнопки конвертации обратно
var bytes = HexStringToBytes(txtRegistryFrom.Text); // преобразование в строку из байтов
var converter = new ArmASerialConverter(); // создание экземпляра класса конвертера
txtKeyFrom.Text = converter.RegistryToSerial(bytes); // преобразование в строку
}

private static Byte[] HexStringToBytes(String hexString){
// удаление символов из строки: пробела, -\r \n \t , ;
var normalizedHex = hexString.Replace(" ", "").Replace("-", "").Replace("\r", "").Replace("\n", "").Replace("\t", "").Replace(",", "").Replace(";", "");
return Enumerable.Range(0, normalizedHex.Length).Where(x => x % 2 == 0).Select(x => Convert.ToByte(normalizedHex.Substring(x, 2), 16)).ToArray();
// вызов стандартного метода переконвертации шестнадцатеричной строки в байты и возвращение в виде массива байт
}}}
Класс конвертер
Код:
public class ArmASerialConverter {
private static readonly String szTemplate = "0123456789ABCDEFGHJKLMNPRSTVWXYZ";

// на вход методу конвертации подается строка, возвращается массив байт
public Byte[] SerialToRegistry(String arma2key) {
var upperkey = arma2key.Trim().ToUpper().Replace('O', '0').Replace('I', '1').Replace("-", ""); // преобразование строки поданной на вход в верхний регистр, обрезание всех пробелов слева и справа, замена O на нуль,  I на 1, удаление тире из строки
var bResult = new Byte[15]; // создание массива байт из 15 элементов
for (var i = 0; i < 3; ++i) { UInt64 qwResult = 0;  // цикл от 0 до 2
for (var j = 0; j < 8; ++j) { // цикл от 0 до 7 (т.к. 64 бита и 8 последовательностей по 8 бит)
var cChar = upperkey[i * 8 + j]; // получение элемента из строки upperkey в виде char
var szPos = szTemplate.IndexOf(cChar); // получение индекса (позиции) символа cChar в строке szTemplate
qwResult |= (UInt64)szPos << (j * 5);} // сдвиг 64 битной целочисленной переменной на  j * 5 влево и произведение операции побитового ИЛИ над этой 64 битной переменной и  qwResult и запись результата в qwResult   
for (var j = 0; j < 5; ++j) { // цикл от 0 до 4
bResult[i * 5 + 5 - 1 - j] = (Byte)(qwResult & 0xFF); // произведение операции побитового И по маске 0xFF над qwResult и приведение к типу байт и запись в массив bResult по индексу i * 5 + 5 - 1 - j   
qwResult >>= 8; // сдвиг qwResult вправо на 8 
}}
return bResult;} // возврат результата

// на вход обратной переконвертации подается массив байт, возвращается строка
public String RegistryToSerial(Byte[] arma2registry){
var bResult = ""; //пустая строка
for (var i = 0; i < 3; ++i) { UInt64 qwResult = 0; // цикл от 0 до 2
for (var j = 0; j < 5; ++j) { // цикл от 0 до 4
qwResult <<= 8; //  сдвиг влево на 8 бит qwResult  64битной переменной целочисленной  
qwResult |= arma2registry[i * 5 + j]; // произведение операции побитового ИЛИ над qwResult  и  i * 5 + j и запись результата в qwResult 
} for (var j = 0; j < 8; ++j) { // цикл от 0 до 7
var szPos = (qwResult >> (j * 5)) & 0x1F; // сдвиг вправо qwResult на  (j * 5) и произведение над полученным операции побитового И по маске 0x1F и запись в  szPos  
var cChar = szTemplate[(Int32)szPos]; // получение позиции символа в массиве szTemplate по индексу и запись в cChar 
bResult += cChar; // конкатенация символа к результату то есть добавление cChar в строку bResult  в конец
}} return bResult; }} // возврат результата
"SPACE.THE FINAL FRONTIER.This's a voyage of starship Enterprise. It's 5-year mission to explore strange new worlds,to seek out new life and civilizations,to boldly go where no man has gone before"
challengerr вне форума Ответить с цитированием
Старый 21.02.2015, 10:20   #7
NightSky41
 
Регистрация: 24.12.2014
Сообщений: 4
По умолчанию

Цитата:
Сообщение от challengerr Посмотреть сообщение
Код:
 public partial class Form_Main : Form{
public Form_Main() { InitializeComponent(); } // инициализация формы (не интересно особо)
private void btnConvertTo_Click(object sender, EventArgs e) { // обработка нажатия на кнопку конвертации туда
var converter = new ArmASerialConverter(); // создание экземпляра класса конвертера
var bytes = converter.SerialToRegistry(txtKeyTo.Text); // вызов метода для конвертации
txtRegistryTo.Text = BitConverter.ToString(bytes); // преобразование результата в строку
}

private void btnConvertFrom_Click(object sender, EventArgs e)  {// обработка конвертации на нажатие кнопки конвертации обратно
var bytes = HexStringToBytes(txtRegistryFrom.Text); // преобразование в строку из байтов
var converter = new ArmASerialConverter(); // создание экземпляра класса конвертера
txtKeyFrom.Text = converter.RegistryToSerial(bytes); // преобразование в строку
}

private static Byte[] HexStringToBytes(String hexString){
// удаление символов из строки: пробела, -\r \n \t , ;
var normalizedHex = hexString.Replace(" ", "").Replace("-", "").Replace("\r", "").Replace("\n", "").Replace("\t", "").Replace(",", "").Replace(";", "");
return Enumerable.Range(0, normalizedHex.Length).Where(x => x % 2 == 0).Select(x => Convert.ToByte(normalizedHex.Substring(x, 2), 16)).ToArray();
// вызов стандартного метода переконвертации шестнадцатеричной строки в байты и возвращение в виде массива байт
}}}
Класс конвертер
Код:
public class ArmASerialConverter {
private static readonly String szTemplate = "0123456789ABCDEFGHJKLMNPRSTVWXYZ";

// на вход методу конвертации подается строка, возвращается массив байт
public Byte[] SerialToRegistry(String arma2key) {
var upperkey = arma2key.Trim().ToUpper().Replace('O', '0').Replace('I', '1').Replace("-", ""); // преобразование строки поданной на вход в верхний регистр, обрезание всех пробелов слева и справа, замена O на нуль,  I на 1, удаление тире из строки
var bResult = new Byte[15]; // создание массива байт из 15 элементов
for (var i = 0; i < 3; ++i) { UInt64 qwResult = 0;  // цикл от 0 до 2
for (var j = 0; j < 8; ++j) { // цикл от 0 до 7 (т.к. 64 бита и 8 последовательностей по 8 бит)
var cChar = upperkey[i * 8 + j]; // получение элемента из строки upperkey в виде char
var szPos = szTemplate.IndexOf(cChar); // получение индекса (позиции) символа cChar в строке szTemplate
qwResult |= (UInt64)szPos << (j * 5);} // сдвиг 64 битной целочисленной переменной на  j * 5 влево и произведение операции побитового ИЛИ над этой 64 битной переменной и  qwResult и запись результата в qwResult   
for (var j = 0; j < 5; ++j) { // цикл от 0 до 4
bResult[i * 5 + 5 - 1 - j] = (Byte)(qwResult & 0xFF); // произведение операции побитового И по маске 0xFF над qwResult и приведение к типу байт и запись в массив bResult по индексу i * 5 + 5 - 1 - j   
qwResult >>= 8; // сдвиг qwResult вправо на 8 
}}
return bResult;} // возврат результата

// на вход обратной переконвертации подается массив байт, возвращается строка
public String RegistryToSerial(Byte[] arma2registry){
var bResult = ""; //пустая строка
for (var i = 0; i < 3; ++i) { UInt64 qwResult = 0; // цикл от 0 до 2
for (var j = 0; j < 5; ++j) { // цикл от 0 до 4
qwResult <<= 8; //  сдвиг влево на 8 бит qwResult  64битной переменной целочисленной  
qwResult |= arma2registry[i * 5 + j]; // произведение операции побитового ИЛИ над qwResult  и  i * 5 + j и запись результата в qwResult 
} for (var j = 0; j < 8; ++j) { // цикл от 0 до 7
var szPos = (qwResult >> (j * 5)) & 0x1F; // сдвиг вправо qwResult на  (j * 5) и произведение над полученным операции побитового И по маске 0x1F и запись в  szPos  
var cChar = szTemplate[(Int32)szPos]; // получение позиции символа в массиве szTemplate по индексу и запись в cChar 
bResult += cChar; // конкатенация символа к результату то есть добавление cChar в строку bResult  в конец
}} return bResult; }} // возврат результата
Огромное спасибо.
NightSky41 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перевод кода с Delphi на с++ fRancu Помощь студентам 4 12.06.2014 21:42
Перевод кода с Delphi в С++. spectrum988 Помощь студентам 12 17.04.2014 12:13
Перевод кода из Delphi на C++ mego4el Общие вопросы C/C++ 1 29.12.2012 22:27
перевод кода с Delphi sergo555 Общие вопросы C/C++ 1 12.11.2011 20:32
Перевод кода с C++ на Delphi atagilov Общие вопросы Delphi 5 22.06.2011 22:09